Saya mencoba memeriksa apakah PHONE_TYPE
variabel berisi satu dari tiga nilai yang valid.
if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
[ "$PHONE_TYPE" != "CISCO" ]
then
echo "Phone type must be nortel,cisco or nec"
exit
fi
Kode di atas tidak berfungsi untuk saya, jadi saya mencoba ini sebagai gantinya:
if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
[ "$PHONE_TYPE" == "CISCO" ]
then
: # do nothing
else
echo "Phone type must be nortel,cisco or nec"
exit
fi
Apakah ada cara yang lebih bersih untuk jenis tugas ini?
shell-script
shell
munish
sumber
sumber
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then
Jawaban yang bagus, dan pelajaran yang sangat berharga;) Hanya ingin melengkapi dengan catatan.
Jenis tes apa yang dipilih untuk digunakan sangat tergantung pada kode, struktur, lingkungan, dll.
Alternatifnya bisa menggunakan saklar atau
case
pernyataan seperti pada:Sebagai catatan kedua Anda harus berhati-hati dengan menggunakan nama variabel huruf besar. Ini untuk mencegah tabrakan antar variabel yang diperkenalkan oleh sistem, yang hampir selalu merupakan huruf besar semua. Jadi,
$phone_type
bukannya$PHONE_TYPE
.Meskipun itu aman, jika Anda memiliki kebiasaan menggunakan semua huruf besar, suatu hari Anda mungkin mengatakan
IFS="boo"
dan Anda berada di dunia yang terluka.Ini juga akan membuatnya lebih mudah untuk menemukan yang mana.
Tidak harus tetapi sangat akan mempertimbangkan.
Mungkin juga merupakan kandidat yang baik untuk suatu fungsi. Ini sebagian besar membuat kode lebih mudah dibaca dan dipelihara. Misalnya:
sumber
Anda harus menggunakan AND, bukan OR.
atau
sumber
Untuk memperbaiki jawaban di atas (karena saya belum dapat berkomentar):
Harap perhatikan bahwa Anda membutuhkan setidaknya bash 4 untuk penggunaan = ~
Ini tidak berfungsi di bash 3.
Saya menguji pada MS Windows 7 menggunakan bash 4.3.46 (berfungsi dengan baik) dan bash 3.1.17 (tidak berfungsi)
LHS dari = ~ harus dalam tanda kutip. Di atas, PHONE_TYPE = "SPACE TEL" akan cocok juga.
sumber
Gunakan [[sebagai gantinya
sumber
[[
vs[
tidak membantu dengan logika dimatikan.Hanya proposal variasi berdasarkan pada solusi @ 0x80:
sumber