Tıpkı diğer basit komutlar gibi [ ... ]
veya test
argümanları arasında boşluk olmasını gerektirir.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Veya
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Öneriler
Bash içindeyken, [[ ]]
sözcük bölme ve yol adı genişletme işlemlerini değişkenlerine yapmadığı için kullanmayı tercih edin, bir ifadenin parçası olmadığı sürece tırnak işareti gerekli olmayabilir.
[[ $# -ne 1 ]]
Ayrıca, sıralanmamış koşul gruplaması, desen eşleştirme (ile genişletilmiş desen eşleme extglob
) ve normal ifade eşleştirme gibi başka özelliklere de sahiptir .
Aşağıdaki örnek, bağımsız değişkenlerin geçerli olup olmadığını kontrol eder. Bir veya iki argümana izin verir.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Saf aritmetik ifadeler için kullanan (( ))
bazı hala daha iyi olabilir, ancak bunlar hala mümkündür [[ ]]
mi onun aritmetik operatörleri ile -eq
, -ne
, -lt
, -le
, -gt
, veya -ge
tek bir dize bağımsız değişken olarak ifade yerleştirerek:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Bunu diğer özelliklerle de birleştirmeniz gerekiyorsa faydalı olacaktır [[ ]]
.
Komut dosyasından çıkma
Geçersiz parametreler iletildiğinde komut dosyasının çıkış yapması da mantıklıdır. Bu zaten ekangas tarafından yorumlarda önerildi, ancak birisi bu değeri döndürülen değer olarak sahip olmak için düzenledi , bu yüzden de doğru yapabilirim.-1
-1
Bash tarafından bir argüman olarak kabul edilmesine rağmen exit
, açıkça belgelenmemiştir ve ortak bir öneri olarak kullanılma hakkı yoktur. 64
o tanımlanan beri en biçimsel değeri de olduğu sysexits.h
ile #define EX_USAGE 64 /* command line usage error */
. Çoğu araçları sever ls
de geri 2
geçersiz argümanlar üzerinde. 2
Senaryolarımı da döndürürdüm ama son zamanlarda artık gerçekten umursamıyorum ve sadece 1
tüm hatalarda kullanıyordum. Ancak, 2
en yaygın ve muhtemelen OS'ye özgü olmadığı için buraya yerleştirelim .
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Referanslar
test
. Bu standart bir Unix komutunun adıdır, gölgelendirmek istemezsiniz.