Sama seperti perintah sederhana lainnya, [ ... ]
atau test
membutuhkan spasi di antara argumennya.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Atau
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Saran
Ketika di Bash, lebih suka menggunakan [[ ]]
karena tidak melakukan pemisahan kata dan perluasan pathname ke variabel-variabelnya yang mengutip mungkin tidak diperlukan kecuali itu bagian dari ekspresi.
[[ $# -ne 1 ]]
Ini juga memiliki beberapa fitur lain seperti pengelompokan kondisi tanpa tanda kutip, pencocokan pola (pencocokan pola diperluas dengan extglob
) dan pencocokan regex.
Contoh berikut memeriksa apakah argumen valid. Ini memungkinkan satu atau dua argumen.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Untuk ekspresi aritmatika murni, menggunakan (( ))
beberapa mungkin masih lebih baik, tetapi mereka masih mungkin dalam [[ ]]
dengan operator aritmatika yang suka -eq
, -ne
, -lt
, -le
, -gt
, atau -ge
dengan menempatkan ekspresi sebagai argumen string tunggal:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Itu seharusnya membantu jika Anda perlu menggabungkannya dengan fitur-fitur lain [[ ]]
juga.
Keluar dari skrip
Ini juga logis untuk membuat skrip keluar ketika parameter yang tidak valid diteruskan ke sana. Ini telah disarankan dalam komentar oleh ekangas tetapi seseorang mengedit jawaban ini untuk menjadikannya -1
sebagai nilai yang dikembalikan, jadi saya mungkin melakukannya dengan benar.
-1
meskipun diterima oleh Bash sebagai argumen untuk exit
tidak didokumentasikan secara eksplisit dan tidak benar untuk digunakan sebagai saran umum. 64
juga merupakan nilai paling formal karena sudah didefinisikan sysexits.h
dengan #define EX_USAGE 64 /* command line usage error */
. Sebagian besar alat suka ls
juga mengembalikan 2
argumen yang tidak valid. Saya juga biasa mengembalikan 2
skrip saya tetapi belakangan ini saya tidak lagi peduli, dan hanya digunakan 1
dalam semua kesalahan. Tapi mari kita letakkan di 2
sini karena ini paling umum dan mungkin tidak spesifik untuk OS.
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Referensi
test
. Itulah nama perintah Unix standar, Anda tidak ingin membayangi itu.