Daugiau
Patikrinkite "Bash" scenarijui perduotų argumentų skaičių
Norėčiau, kad mano "Bash" skriptas spausdintų klaidos pranešimą, jei nesilaikoma reikalaujamo argumentų skaičiaus.
Išbandžiau tokį kodą:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Dėl nežinomos priežasties gavau tokią klaidą:
test: line 4: [2: command not found
Ką darau ne taip?
659
3
Kaip ir bet kuri kita paprasta komanda,
[ ... ]
arbatest
tarp argumentų turi būti tarpai.Arba
Pasiūlymai
Kai naudojate Bash, verčiau naudokite
[[[ ]]
, nes jis neatlieka žodžių skaidymo ir kelio vardo plėtojimo savo kintamiesiems, todėl citavimas gali būti nereikalingas, nebent tai būtų išraiškos dalis.Ji taip pat turi keletą kitų funkcijų, pavyzdžiui, neužrašytų sąlygų grupavimą, šablonų atitikimą (išplėstinį šablonų atitikimą su
extglob
) ir regex atitikimą.Toliau pateiktame pavyzdyje tikrinama, ar argumentai galioja. Galima naudoti vieną arba du argumentus.
Grynai aritmetinėms išraiškoms kai kurioms vis dar geriau naudoti
((( ))
, tačiau jas vis dar galima naudoti[[ ]]
su jo aritmetiniais operatoriais, tokiais kaip-eq
,-ne
,-lt
,-le
,-gt
arba-ge
, pateikus išraišką kaip vieną eilutės argumentą:Tai turėtų būti naudinga, jei jums reikėtų jį derinti ir su kitomis
[[ ]]
funkcijomis.Išėjimas iš scenarijaus
Taip pat logiška, kad scenarijus išeitų, kai jam perduodami negaliojantys parametrai. Tai jau buvo pasiūlyta komentaruose ekangas, bet kažkas redagavo šį atsakymą, kad jis būtų su
-1
kaip grąžinama verte, todėl galėčiau tai padaryti teisingai.-1
, nors ir priimamas Bash kaipexit
argumentas, nėra aiškiai dokumentuotas ir nėra teisinga jį naudoti kaip bendrą pasiūlymą.64
taip pat yra oficialiausia reikšmė, nes ji apibrėžtasysexits.h
su#define EX_USAGE 64 /* komandinės eilutės naudojimo klaida */``. Dauguma įrankių, tokių kaip
ls, taip pat grąžina
2, jei argumentai yra neteisingi. Aš savo scenarijuose taip pat grąžindavau
2, bet pastaruoju metu man tai nebelabai rūpėjo ir visose klaidose tiesiog naudojau
1. Tačiau čia tiesiog įrašykime
2`, nes ji yra labiausiai paplitusi ir tikriausiai nesusijusi su operacine sistema.Nuorodos
Jei dirbate su skaičiais, vertėtų naudoti aritmetines išraiškas.
Apie []: !=, =, == ... yra stringų palyginimo operatoriai, o -eq, -gt ... yra aritmetiniai dvejetainiai operatoriai.
Aš naudočiau:
Arba: