Jak sprawdzić poprawną liczbę argumentów (jeden argument). Jeśli ktoś próbuje wywołać skrypt bez przekazania poprawnej liczby argumentów i upewnienia się, że argument wiersza poleceń faktycznie istnieje i jest katalogiem.
Tłumaczenie: Jeśli liczba argumentów nie jest (numerycznie) równa 1 lub pierwszy argument nie jest katalogiem, wyprowadza użycie na stderr i kończy pracę z kodem statusu błędu.
Bardziej przyjazne raportowanie błędów:
#!/bin/shif["$#"-ne 1];then
echo "Usage: $0 DIRECTORY">&2
exit 1fiif![-e "$1"];then
echo "$1 not found">&2
exit 1fiif![-d "$1"];then
echo "$1 not a directory">&2
exit 1fi
@Andrew K: w której linii to zgłasza? Jeśli jest to „czy” linia, spróbuj wycinanie jedną z dwóch klauzul czyni go albo if [ "$#" -ne 1 ] ; thenlub if ! [ -d "$1" ]; thenzobaczyć, które klauzula jest przyczyną kłopotów.
Laurence Gonsalves,
Rozgryzłem to, dziękuję. A co jeśli nazwa pliku nie istnieje?
Andrew K
Nie istnieje == nie jest reżyserem jeśli chodzi o -dto. Jeśli chcesz dodać oddzielny czek, możesz użyć go -edo sprawdzenia istnienia.
Laurence Gonsalves,
if [-e "$ 1"] to echo "$ 1: Nie ma takiego katalogu" exit 1 fi
Andrew K
@Andrew K: chcesz odwrócić czek. -ezwraca prawdę, jeśli plik istnieje. Do odpowiedzi dodałem bardziej przyjazne raportowanie błędów.
Laurence Gonsalves,
22
cat script.sh
var1=$1
var2=$2
if["$#"-eq 2]thenif[-d $var1 ]then
echo directory ${var1} exist
else
echo Directory ${var1}Does not exists
fiif[-d $var2 ]then
echo directory ${var2} exist
else
echo Directory ${var2}Does not exists
fielse
echo "Arguments are not equals to 2"
exit 1fi
Możesz sprawdzić całkowitą liczbę argumentów, które są przekazywane w linii poleceń za pomocą " $#"
Powiedz na przykład, że mój skrypt powłoki tohello.sh
sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument if[ $# -eq 1 ] then
echo $1
else
echo "invalid argument please pass only one argument "fi
shell
to znaczy/bin/sh
Odpowiedzi:
Tłumaczenie: Jeśli liczba argumentów nie jest (numerycznie) równa 1 lub pierwszy argument nie jest katalogiem, wyprowadza użycie na stderr i kończy pracę z kodem statusu błędu.
Bardziej przyjazne raportowanie błędów:
źródło
if [ "$#" -ne 1 ] ; then
lubif ! [ -d "$1" ]; then
zobaczyć, które klauzula jest przyczyną kłopotów.-d
to. Jeśli chcesz dodać oddzielny czek, możesz użyć go-e
do sprawdzenia istnienia.-e
zwraca prawdę, jeśli plik istnieje. Do odpowiedzi dodałem bardziej przyjazne raportowanie błędów.cat script.sh
wykonaj to jak poniżej -
Wynik będzie podobny do -
źródło
Możesz sprawdzić całkowitą liczbę argumentów, które są przekazywane w linii poleceń za pomocą "
$#
" Powiedz na przykład, że mój skrypt powłoki tohello.sh
Wyjście będzie
hello-world
źródło