Điểm:0

Sự khác biệt giữa hai biểu thức này là gì [Shell Script]

lá cờ gd

Một người mới đến đây. Chà, tôi đang gặp một số khó khăn trong việc hiểu sự khác biệt giữa:

để a=$a+$b
hãy để tôi=$i+1 

và:

a+=$b
i=$(($i + 1))

Chắc chắn có sự khác biệt vì biểu thức thứ hai đã làm hỏng kịch bản của tôi, mang lại giá trị rác.

Đây là kịch bản của tôi:

câu hỏi là [tập lệnh cần cung cấp cho người dùng khả năng đặt một số dấu làm đầu vào cho đến khi người dùng cung cấp q (làm lối thoát) hoặc giá trị âm, cuối cùng, chúng ta cần tính giá trị trung bình của các dấu đã cho]

tập lệnh này đang hoạt động nhưng nếu bạn thay đổi hãy để moyenne=$moyenne+$notehãy để tôi=$i+1 với moyenne+=$notei=$(($i + 1)) nó sẽ đưa ra một giá trị rác cho moyenne (giá trị ở giữa).

#!/bin/bash

ghi chú = 0
meyenne=0
tôi=0

cho đến khi [ "$note" -lt 0 ]; làm
  đọc -p "Entrer la note (appuyez sur q pour quitter): " lưu ý
  nếu [ "$note" = "q" ]; sau đó
    ghi chú=-4
    tiếng vang "Thoát"
  elif [ "$note" -ge 16 ]; sau đó
    tiếng vang "Tres biển"
  elif [ "$note" -ge 14 ]; sau đó
    vang "Bien"
  elif [ "$note" -ge 12 ]; sau đó
    tiếng vang "Assez bien"
  elif [ "$note" -ge 10 ]; sau đó
    tiếng vang "Moyen"
  elif [ "$note" -ge 0 ]; sau đó
    tiếng vang "Không đủ"
  khác
    tiếng vang "Thoát"
  fi
  nếu [ "$note" -ge 0 ]; sau đó
    hãy để moyenne=$moyenne+$note
    hãy để tôi=$i+1
  fi
xong
moyenne=$(($moyenne / $i))
echo "la moyenne est $moyenne de $i note"

waltinator avatar
lá cờ it
Luôn dán tập lệnh của bạn vào `https://shellcheck.net`, trình kiểm tra cú pháp hoặc cài đặt `shellcheck` cục bộ. Hãy biến việc sử dụng `shellcheck` thành một phần trong quy trình phát triển của bạn.
OUSSAMA ABBOU avatar
lá cờ gd
@waltinator cảm ơn bạn
Điểm:3
lá cờ hr

Phần liên quan của người đàn ông bash:

   Trong ngữ cảnh mà một câu lệnh gán đang gán một giá trị cho một
   biến shell hoặc chỉ mục mảng, toán tử += có thể được sử dụng để nối thêm vào
   hoặc thêm vào giá trị trước đó của biến. Điều này bao gồm các đối số để
   các lệnh dựng sẵn, chẳng hạn như khai báo chấp nhận các câu lệnh gán
   (các lệnh khai báo). Khi += được áp dụng cho một biến mà
   thuộc tính số nguyên đã được đặt, giá trị được ước tính dưới dạng số học exâ
   pression và thêm vào giá trị hiện tại của biến, cũng là evalâ
   uated. Khi += được áp dụng cho một biến mảng bằng cách sử dụng phép gánâ
   ment (xem Mảng bên dưới), giá trị của biến không được bỏ đặt (vì nó là
   khi sử dụng =) và các giá trị mới được thêm vào mảng bắt đầu từ
   lớn hơn chỉ số tối đa của mảng (đối với mảng được lập chỉ mục) hoặc
   được thêm dưới dạng các cặp khóa-giá trị bổ sung trong một mảng kết hợp. Khi a
   được dán vào một biến có giá trị chuỗi, giá trị được mở rộng và thêm vào
   giá trị của biến.

Vì bạn chưa đặt thuộc tính số nguyên cho một, a+=$b sẽ thực hiện nối chuỗi thay vì cộng số học:

$a=1; b=2; a+=$b; lặp lại "$a"
12

nhưng trái lại

$ bỏ đặt a b
$ khai báo -i a=1; b=2; a+=$b; lặp lại "$a"
3

Ngoài ra, bạn có thể buộc đánh giá số học bằng cách sử dụng (( ... ))

$ bỏ đặt a b
$a=1; b=2; ((a+=$b)); lặp lại "$a"
3

(lưu ý rằng ((a+=b)) cũng hoạt động; các $ không cần thiết phải hủy tham chiếu các biến trong ngữ cảnh số học).

OUSSAMA ABBOU avatar
lá cờ gd
cảm ơn bạn, bây giờ tôi nhận được nó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.