Cum se execută bucla while loop în scriptul shell pentru condiția FALSE? (Unix, Script Shell)

Tiger a intrebat.

Am încercat cu un exemplu, dar nu îmi este clar.

PRIMUL EXEMPLU

#!/bin/bash
i=0
while [ $i -lt 10 ]
do
    echo "$i"
    i=`echo "$i + 1" | bc`
done

ieșire ===> 0,1,2,2,3,3,4,5,6,7,7,8,9

Acum, când am executat while „while [ true ] „, se obține o ieșire ca o buclă infinită //Eu sunt de acord//.
dar când am executat din nou while „while [ false ] „, rezultatul este o buclă infinită. /Nu sunt de acord/

Puteți explica, vă rog, a doua buclă while și cum funcționează de fapt?

while [ false ]    #give the infinite loop
while [ true ]     #give the infinite loop
while [ 0 ]        #give the infinite loop
while [ 1 ]        #give the infinite loop
while [ `ls` ]
while [ `echo 1` ] #give the infinite loop
while((0))         #loop not execute
while((1))         #give the infinite loop

user273376

Comentarii

  • În primul rând, știți care este diferența dintre [] și (()) ? [] este un operator de test. (())) evaluator aritmetic. –  > Por Vikyboss.
  • care este declarația de returnare a „[ $i -lt 10 ]” dacă i=5 @Vikyboss –  > Por Tiger.
  • Atunci când evaluați o expresie în interiorul operatorului de test [], acesta ar trebui să returneze un cod de ieșire de 0 pentru expresia care se evaluează la adevărat și non-zero dacă este falsă. [ $i -lt 10 ] spune că i(5) este mai mic decât 10, deci returnează un cod de ieșire de 0. –  > Por Vikyboss.
  • V-aș sugera să citiți pagina de manual a ‘test’ și ‘bash’. –  > Por Vikyboss.
  • dacă scriem scriptul ca while 1 do echo „hello” done while 0 do echo „hello” done –  > Por Tiger.
1 răspunsuri
Hauke Laging

În while [ false ] false nu este nici o comandă și nici o valoare booleană. La while se așteaptă la o comandă, dar [ ... ] fără operatori verifică doar orice șir de caractere care nu este gol. Astfel, [ false ] este adevărat. În acest sens, este același lucru cu [ faaaalseeee ].

Ceea ce ați vrut să spuneți este:

while true; do ...

while false; do ...

Comentarii

  • atunci cum se execută…?? ca în limbajul c „while(0)” –> nu se va executa niciodată –  > Por Tiger.
  • @Tiger Nu înțeleg întrebarea. –  > Por Hauke Laging.
  • atunci ce se întâmplă cu această declarație ” echo [ $i -lt 10 ] ” –  > Por Tiger.
  • pur și simplu vreau când se execută bucla while și care este declarația de returnare a „[ $i -lt 10 ]” dacă i=5 –  > Por Tiger.
  • @Tiger Primul tău exemplu arată că codul de ieșire din [ 5 -lt 10 ] este zero (adică adevărat). echo [ $i -lt 10 ] este doar un echo instrucțiune, instrucțiunea [ $i -lt 10 ] partea nu are altă semnificație decât un șir de caractere (sau mai degrabă: mai multe șiruri). echo există întotdeauna cu zero, indiferent care este șirul de ieșire. –  > Por Hauke Laging.