#!/bin/sh
if [ $num -eq 9 -o $num -eq 75 -o $num -eq 200 ]; then
echo "do this"
elif [ $num -eq 40 -o $num -eq 53 -o $num -eq 63]; then
echo "do something for this"
else
echo "for other do this"
fi
お問い合わせの表現を絞り込む他の方法はありますかif
?たぶん良い
[ $num -eq (9,75,200) ]
しかし、このOSにはGNUユーティリティはありません。
答え1
時々、他の構造がより読みやすくなることがあります。
case $num in
9|75|200) echo "do this" ;;
40|53|63) echo "do something for this" ;;
*) echo "for other do this" ;;
esac
答え2
注意してください。 posixは4つ以上のパラメータでテストを定義しないため、テスト構造は次のとおりです。はっきりしない。より第六大ヒットトラップ
したがって、テストを使用する場合は、さらに詳しく説明する必要があります。
if [ "$arg" = 9 ] || [ "$arg" = 75 ] || [ "$arg" = 200 ]
または代わりにユースケース
case "$arg" in
9|75|200) do something ; ;
40|53|63) do that ;;
*) else ... ;;
esac
答え3
これは機能の操作のように聞こえます。
test_num() {
n=$1; shift
for arg do
[ "$arg" -eq "$n" ] && return 0
done
} 2>/dev/null
if test_num "$num" 9 75 200; then
echo "do this"
elif test_num "$num" 40 53 63; then
echo "do something for this"
else
echo "for other do this"
fi
答え4
別のPOSIXソリューション:
if printf '%s' "$num" | grep -xE '(9|75|200)' >/dev/null; then
echo "do this"
elif printf '%s' "$num" | grep -xE '(40|53|63)' >/dev/null; then
echo "do something for this"
else
echo "for other do this"
fi
このオプションは非常に遅いです。case
このオプションより50倍遅いです。
これは短いスクリプトですが、ケースオプションだけが2倍長くかかるより簡単なスクリプトだと思います。
#!/bin/sh
num="$1" a='9 75 200' b='40 53 63'
tnum() {
for arg
do [ "$arg" = "$num" ] && return 0
done return 1
}
if tnum $a; then
echo "do this"
elif tnum $b; then
echo "do something for this"
else
echo "for other do this"
fi
注:[ "$arg" = "$num" ]
すべての状況で有効なテストはありません。00 = 0
たとえば、このテストは失敗します。
そして数値テストは[ "$arg" -eq "$num" ]
null値と一致しません[ "" -eq "" ]
。
状況に最適な方法を選択できます。