ตรรกะของ($1 != 1) OR ($1 != 2)
ข้อบกพร่อง
หาก$1
เป็นเช่น1
นั้นจะไม่เท่ากับ2
การทดสอบจะเป็นจริง
นอกจากนี้หาก$1
เป็นเช่น2
นั้นจะไม่เท่ากับ1
ดังนั้นการทดสอบจะเป็นจริงเช่นกัน ในระยะสั้นการทดสอบจะเป็นจริงเสมอ
คุณควรทดสอบความเท่าเทียมกันดังนี้($1 == 1) or ($1 == 2)
:
if [[ ($1 == '1') || ($1 == '2') ]]; then
echo "$1 OK"
else
echo "$1 BAD"
fi
หรือง่ายกว่า (เป็น ksh, bash หรือ zsh):
[[ $1 == [12] ]] && echo "$1 OK" || echo "$1 BAD"
หรือใช้ไวยากรณ์ sh (พกพาไปยังเปลือก POSIX ทั้งหมด):
if [ "$1" = '1' ] || [ "$1" = '2' ]; then
echo "$1 OK"
else
echo "$1 BAD"
fi
หรือด้วยสำนวนกรณี:
case $1 in
(1 | 2) echo "$1 OK" ;;
(*) echo BAD "$1 BAD" ;;
esac
ข้างต้นทั้งหมดเป็นการเปรียบเทียบสตริงถ้าคุณต้องการเปรียบเทียบเป็นตัวเลขคุณสามารถทำได้:
if [ "$1" -eq 1 ] || [ "$1" -eq 2 ]; then
echo "$1 OK"
else
echo "$1 BAD"
fi
แต่ที่จะไม่ทำงานหาก$1
เป็น1.0
หรือ1e0
หรือเทียบเท่าหลายตัวเลขอื่น ๆ 1
ที่จะ จะทำงานร่วมกับ01
หรือ0001
แม้ว่า
if $1 is not in {'1', '2' } then …
(ดูตัวอย่างกรณีเป็น bash)