Tıpkı diğer basit komutlar gibi [ ... ]veya testargü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 -getek 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
-1Bash 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. 64o tanımlanan beri en biçimsel değeri de olduğu sysexits.hile #define EX_USAGE 64 /* command line usage error */. Çoğu araçları sever lsde geri 2geçersiz argümanlar üzerinde. 2Senaryolarımı da döndürürdüm ama son zamanlarda artık gerçekten umursamıyorum ve sadece 1tüm hatalarda kullanıyordum. Ancak, 2en 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.