Mai mult
Verificați numărul de argumente transmise unui script Bash
Aș dori să-mi script Bash pentru a imprima un mesaj de eroare dacă este necesar argument numărul nu este cunoscut.
Am incercat codul de mai jos:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Pentru un motiv necunoscut am'am primit urmatoarea eroare:
test: line 4: [2: command not found
Ce fac gresit?
659
9
La fel ca orice altă comandă simplă, ` [ ... ] " sau " test necesită spații între argumentele sale.
Sau
Sugestii
Când în Bash, prefera folosind
[[ ]]
în loc ca ea nu't face cuvânt de divizare și cale de extindere a acesteia variabile care citezi nu pot fi necesare dacă nu's parte dintr-o expresie.Ea are, de asemenea, unele alte caracteristici, cum ar fi necotate starea de grupare, de model de potrivire (extended model de potrivire cu extglob`) și regex potrivire.
Următorul exemplu verifică dacă argumentele sunt valabile. Acesta permite un singur argument sau două.
Pentru pure expresii aritmetice, folosind
(( ))
pentru unii ar putea fi mai bine, dar acestea sunt încă posibile în[[ ]]cu operatori aritmetici ca
-eq,
-ne,
-a,
-le,
-gt " sau " - ge` prin plasarea exprimare ca un singur șir argument:Care ar trebui să fie de ajutor dacă ai nevoie să-l combine cu alte caracteristici ale
[[ ]]
la fel de bine.Ieșirea din script
L's, de asemenea, logic pentru a face script-ul de ieșire atunci când invalid parametri sunt transmise la aceasta. Acest lucru a fost deja sugerat în comments de ekangas dar cineva a editat acest răspuns să-l aibă cu
-1
ca valoarea returnată, așa că am putea la fel de bine o fac bine.-1
, deși acceptate de Bash ca un argument la "ieșire" nu este documentată în mod explicit și nu este potrivit pentru a fi folosit ca o sugestie comună.64
este, de asemenea, cele mai formale valoare de l's definit însysexits.h " cu " #define EX_USAGE 64 /* în linia de comandă unitate procesor eroarea de utilizare */
. Cele mai multe instrumente, cum ar fi "ls", de asemenea, a reveni2
pe argumente nevalide. Am, de asemenea, folosit pentru a reveni2
în scripturi, dar în ultima vreme nu mai păsat cu adevărat, și pur și simplu folosit1
în toate erorile. Dar las's doar locul 2 pentru că aici, deoarece's cele mai comune și, probabil, nu sistemul de OPERARE specifice.Bibliografie
Ar putea fi o idee bună să utilizați expresii aritmetice daca're de-a face cu numere.
Pe []: !=, =, == ... sunt string operatori de comparație și -eq, -gt ... sunt aritmetică cele binare.
Mi-ar folosi:
Sau:
Daca're interesat doar de salvarea dacă un anumit argument lipsește, Parametru de Substituție este mare:
Un simplu o linie care funcționează se poate face folosind:
Acest lucru se descompune la:
Se gândește să rețineți:
Check out acest bash cheatsheet, poate ajuta foarte mult.
Pentru a verifica lungimea de argumente trecut în, puteți folosi"$#"`
Pentru a utiliza serie de argumente trecut în, puteți folosi"$@"`
Un exemplu de verificare lungimea, și iterarea ar fi: `` myFunc() { dacă [[ "$#" -gt 0 ]]; apoi pentru arg în "$@"; face echo $arg făcut fi }
myFunc "$@" ``
Acest articled m-a ajutat, dar a fost lipsă câteva lucruri pentru mine și situația mea. Sperăm că acest lucru vă ajută cineva.
În cazul în care doriți pentru a fi pe partea în condiții de siguranță, vă recomandăm să utilizați getopts.
Aici este un mic exemplu:
vezi mai multe detalii aici, de exemplu http://wiki.bash-hackers.org/howto/getopts_tutorial
Aici un simplu garnituri pentru a verifica dacă un singur parametru este dat altfel de ieșire script-ul:
Tu ar trebui să adăugați spații între condiție de testare:
Sper că acest lucru ajută.