Preverjanje števila argumentov, posredovanih skripti Bash
Želim, da moja skripta Bash izpiše sporočilo o napaki, če zahtevano število argumentov ni izpolnjeno.
Poskusil sem z naslednjo kodo:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Iz neznanega razloga sem dobil naslednjo napako:
test: line 4: [2: command not found
Kaj delam narobe?
659
3
Tako kot katerikoli drug preprost ukaz tudi
[ ... ]
alitest
zahteva presledke med svojimi argumenti.Ali
Predlogi
V programu Bash raje uporabljajte
[[[ ]]
, saj ta program ne izvaja deljenja besed in razširjanja imen poti na svoje spremenljivke, zato navajanje ni potrebno, razen če je del izraza.Ima tudi nekatere druge funkcije, kot so grupiranje pogojev brez citatov, ujemanje vzorcev (razširjeno ujemanje vzorcev z
extglob
) in ujemanje regex.Naslednji primer preveri, ali so argumenti veljavni. Dovoljen je en sam argument ali dva.
Za čiste aritmetične izraze je uporaba
(( ))
za nekatere morda še vedno boljša, vendar so še vedno mogoči v[[ ]]
z njegovimi aritmetičnimi operatorji, kot so-eq
,-ne
,-lt
,-le
,-gt
ali-ge
, tako da izraz postavimo kot en sam argument v obliki niza:To bi vam moralo biti v pomoč, če bi ga morali kombinirati tudi z drugimi funkcijami
[[[ ]]
.Izhod iz skripte
Prav tako je logično, da se skripta zaključi, če so ji posredovani neveljavni parametri. To je v komentarjih že predlagal ekangas, vendar je nekdo uredil ta odgovor, da je bila vrnjena vrednost
-1
, zato bi to lahko tudi jaz naredil pravilno.Čeprav
-1
sprejme Bash kot argument zaexit
, to ni izrecno dokumentirano in ni prav, da se uporablja kot običajen predlog.64
je tudi najbolj formalna vrednost, saj je opredeljena vsysexits.h
z#definine EX_USAGE 64 /* napaka pri uporabi ukazne vrstice */``. Večina orodij, kot je
ls, vrne tudi
2pri neveljavnih argumentih. Tudi sam sem v svojih skriptih včasih vračal
2, vendar me v zadnjem času to ni več zanimalo in sem preprosto uporabljal
1pri vseh napakah. Vendar naj
2` navedemo tukaj, saj je najpogostejši in verjetno ni specifičen za operacijski sistem.Reference
Če imate opravka s številkami, je morda dobro uporabiti aritmetične izraze.
Na []: !=, =, == ... so strunski primerjalni operatorji, -eq, -gt ... pa aritmetični binarni operatorji.
Uporabil bi:
Ali: