Controleer het aantal argumenten dat is doorgegeven aan een Bash script
Ik wil dat mijn Bash script een foutmelding geeft als het vereiste aantal argumenten niet wordt gehaald.
Ik heb de volgende code geprobeerd:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Om een onbekende reden krijg ik de volgende foutmelding:
test: line 4: [2: command not found
Wat doe ik verkeerd?
659
3
Net als elk ander eenvoudig commando,
[ ... ]
oftest
vereist spaties tussen de argumenten.Of
Suggesties
Gebruik in Bash liever
[[ ]]
omdat het geen woordsplitsing en padnaamuitbreiding doet voor zijn variabelen en quoten niet nodig is, tenzij het onderdeel is van een expressie.Het heeft ook enkele andere functies zoals unquoted condition grouping, pattern matching (extended pattern matching met
extglob
) en regex matching.Het volgende voorbeeld controleert of argumenten geldig zijn. Het staat een enkel argument of twee toe.
Voor pure rekenkundige uitdrukkingen is het gebruik van
(( ))
voor sommigen misschien nog steeds beter, maar ze zijn nog steeds mogelijk in[[ ]]
met zijn rekenkundige operatoren zoals-eq
,-ne
,-lt
,-le
,-gt
, of-ge
door de uitdrukking als een enkel string argument te plaatsen:Dat zou handig moeten zijn als je het ook met andere functies van
[[ ]]
zou moeten combineren.Het script afsluiten
Het is ook logisch om het script te laten afsluiten als er ongeldige parameters aan worden doorgegeven. Dit is al voorgesteld in de comments door ekangas maar iemand bewerkte dit antwoord om het met
-1
als de geretourneerde waarde te hebben, dus ik kan het net zo goed goed goed goed doen.-1
hoewel geaccepteerd door Bash als een argument voorexit
is niet expliciet gedocumenteerd en is niet juist om te worden gebruikt als een algemene suggestie.64
is ook de meest formele waarde omdat het gedefinieerd is insysexits.h
met#define EX_USAGE 64 /* command line usage error */
. De meeste programma's zoalsls
geven ook2
terug bij ongeldige argumenten. Ik gaf vroeger ook2
terug in mijn scripts, maar de laatste tijd kon het me niet meer echt schelen, en gebruikte ik gewoon1
in alle fouten. Maar laten we2
hier plaatsen omdat het het meest voorkomt en waarschijnlijk niet OS-specifiek is.Referenties
Het is misschien een goed idee om rekenkundige uitdrukkingen te gebruiken als je'met getallen te maken hebt.
Op []: !=, =, == ... zijn string vergelijkingsoperatoren en -eq, -gt ... zijn aritmetische binaire operatoren.
Ik zou gebruiken:
Of: