Puncte:0

Bash de la zero - din nou

drapel cn

Pe măsură ce călătoria mea prin Bash continuă, sunt încă blocat cu lucruri ridicole, cum ar fi acest scenariu, la care pur și simplu nu pot să-mi înțeleg:

#!/bin/bash

dacă [ $1 -gt 100 ]
atunci
   echo „Ați introdus un număr mai mare”
   dacă (( $1 % 2 == 0 ))
   atunci
      echo „Și este chiar un număr par”
fi

Recent, mi s-a recomandat să țin ShellCheck la îndemână și așa am făcut, dar se pare că nici sugestiile sale despre cum să îmbunătățim acest script nu funcționează. Practic, când încerc să-l rulez, primesc întotdeauna erori precum „[: !=: operator unary waited” chiar și atunci când încerc să citez $1 în „$1”, care este recomandat și de ShellCheck. Ma poate ajuta cineva sa cobor? Mulțumesc mult anticipat!

terdon avatar
drapel cn
Cum rulezi asta? În primul rând, nu puteți obține eroarea menționată, deoarece nu aveți `!=` nicăieri în scriptul dvs. În al doilea rând, pierdeți `dacă` de închidere, ceea ce înseamnă că veți primi încă o eroare. În al treilea rând, probabil că rulați scriptul fără un argument, așa că `$1` este nedefinit. Dar vă rugăm să nu ne faceți să ghicim: [editați] întrebarea dvs. și asigurați-vă că afișați codul real pe care îl utilizați, explicați cum îl lansați și erorile reale pe care le primiți.
Puncte:2
drapel cn
raj

Scriptul dvs. are o eroare de sintaxă; ii lipseste inca unul fi la sfarsit. Odată ce această eroare este remediată, obțineți „operatorul unar așteptat”, deoarece dvs $1 valoare (valoarea primului parametru al scriptului) este goală, iar primul dacă comanda se așteaptă ca acea valoare să nu fie goală. Trebuie să apelați scriptul cu un număr ca parametru, cum ar fi:

./script 150

Apoi primești răspunsul:

Ai tastat un număr mai mare
Și este chiar un număr par

Dacă doriți ca scriptul să nu afișeze mesaje de eroare atunci când este apelat fără parametru, înainte de a utiliza parametrul trebuie să detectați dacă parametrul este gol și să faceți ceva. De exemplu, puteți adăuga următorul cod înainte de primul dacă comanda:

dacă [ -z „$1” ]
atunci
   echo "Parametru necesar!"
   Ieșire
fi

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.