Puncte:0

Care este diferența dintre aceste două expresii [Shell Script]

drapel gd

Un începător e aici. Ei bine, am probleme în a înțelege diferența dintre:

fie a=$a+$b
fie i=$i+1 

și:

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

Cu siguranță există o diferență pentru că a doua expresie mi-a distrus scenariul, dând o valoare de gunoi.

Iată scenariul meu:

întrebarea este [ scriptul trebuie să ofere utilizatorului posibilitatea de a pune câteva note ca intrare până când utilizatorul dă q ( ca ieșire ) sau o valoare negativă, în final, trebuie să calculăm valoarea medie a notelor date]

acest script funcționează, dar dacă schimbați let moyenne=$moyenne+$note și fie i=$i+1 cu medie+=$notă și i=$(($i + 1)) va da o valoare de gunoi pentru medie (valoarea mijlocie).

#!/bin/bash

nota=0
meyenne=0
i=0

până la [ "$notă" -lt 0 ]; do
  citește -p "Entrer la note (appuyez sur q pour quitter): " note
  if [ "$notă" = "q" ]; atunci
    notă=-4
    ecou „Ieșire”
  elif [ "$notă" -ge 16 ]; atunci
    ecou „Tres Bien”
  elif [ "$notă" -ge 14 ]; atunci
    ecou "Bien"
  elif [ "$notă" -ge 12 ]; atunci
    ecou „Assez bien”
  elif [ "$notă" -ge 10 ]; atunci
    ecou "Moyen"
  elif [ "$notă" -ge 0 ]; atunci
    ecou "Insuffi"
  altfel
    ecou „Ieșire”
  fi
  if [ "$notă" -ge 0 ]; atunci
    let moyenne=$moyenne+$note
    fie i=$i+1
  fi
Terminat
medie=$(($moyenne / $i))
echo "la medie este $moyenne de $i note"

waltinator avatar
drapel it
Lipiți întotdeauna scriptul în `https://shellcheck.net`, un verificator de sintaxă sau instalați `shellcheck` local. Utilizarea „shellcheck” este parte a procesului de dezvoltare.
OUSSAMA ABBOU avatar
drapel gd
@waltinator mulțumesc
Puncte:3
drapel hr

Secțiunea relevantă a man bash:

   În contextul în care o instrucțiune de atribuire atribuie o valoare lui a
   variabilă shell sau index de matrice, operatorul += poate fi folosit pentru a adăuga la
   sau adăugați la valoarea anterioară a variabilei. Aceasta include argumente pentru
   comenzi încorporate, cum ar fi declare that accept assignment statements
   (comenzi de declarare). Când += este aplicat unei variabile pentru care
   Atributul întreg a fost setat, valoarea este evaluată ca o exâ aritmetică
   presiune și adăugată la valoarea curentă a variabilei, care este și evalâ
   uated. Când += este aplicat unei variabile matrice folosind atribuirea compusăâ
   (vezi Matrice de mai jos), valoarea variabilei nu este nesetata (așa cum este
   când se utilizează =), iar valorile noi sunt atașate matricei începând cu
   unul mai mare decât indicele maxim al matricei (pentru matrice indexate) sau
   adăugată ca perechi cheie-valoare suplimentare într-o matrice asociativă. Când apâ
   plied la o variabilă cu valoare de șir, valoarea este extinsă și atașată la
   valoarea variabilei.

Deoarece nu ați setat atributul întreg pentru A, a+=$b va efectua concatenare de șiruri în loc de adunare aritmetică:

$ a=1; b=2; a+=$b; ecou „$a”
12

întrucât

$ unset a b
$ declara -i a=1; b=2; a+=$b; ecou „$a”
3

Alternativ, puteți forța evaluarea aritmetică folosind (( ... ))

$ unset a b
$ a=1; b=2; ((a+=$b)); ecou „$a”
3

(Rețineți că ((a+=b)) functioneaza de asemenea; cel $ nu este necesar să dereferiți variabilele într-un context aritmetic).

OUSSAMA ABBOU avatar
drapel gd
multumesc, acum am inteles.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.