Bash(Linux)でcase
を使用して以下を実行しようとしています。
Xが460〜660の場合、X情報を出力します。
Xが661から800の間にある場合、他の何かをします。
等。
今これは私が持っているものです:
case $MovieRes in
[461-660]*) echo "$MovieName,480p" >> moviefinal ;;
[661-890]*) echo "$MovieName,720p" >> moviefinal ;;
[891-1200]*) echo "$MovieName,1080p" >> moviefinal ;;
*) echo "$MovieName,DVD" >> moviefinal ;;
esac
しかし、どういうわけか480p、720p、または1080pのものの多くは、代わりにDVDで終わっています。変数$MovieRes
は、各行に1〜1200の数字を示す単純なリストです。値に応じて、case
はどの「ケース」を適用するかを決定します。
これを達成するために実際にcase
を使用する方法を知りたいのですが、このような範囲を扱うときは少し混乱するからです。
Bashでは、arithmetic expression
:((...))
を使用できます
if ((461<=X && X<=660))
then
echo "480p"
Elif ((661<=X && X<=890))
then
echo "720p"
Elif ((891<=X && X<=1200))
then
echo "1080p"
else
echo "DVD"
fi >> moviefinal
Bash case
ステートメントは、数値範囲を理解しません。 シェルパターン を理解します。
以下が動作するはずです:
case $MovieRes in
46[1-9]|4[7-9][0-9]|5[0-9][0-9]|6[0-5][0-9]|660) echo "$MovieName,480p" >> moviefinal ;;
66[1-9]|6[7-9][0-9]|7[0-9][0-9]|8[0-8][0-9]|890) echo "$MovieName,720p" >> moviefinal ;;
89[1-9]|9[0-9][0-9]|1[0-1][0-9][0-9]|1200) echo "$MovieName,1080p" >> moviefinal ;;
*) echo "$MovieName,DVD" >> moviefinal ;;
esac
ただし、if-elseステートメントを使用して、他の回答のように番号範囲を比較することをお勧めします。 case
は、この問題を解決する適切なツールではありません。この回答は説明のみを目的としています。
あなたが望むように破壊的なケースをする楽しみのために、あなたは$((...))
を使うことができます
case 1 in
$(($MovieRes<= 460)))echo "$MovieName,???";;
$(($MovieRes<= 660)))echo "$MovieName,480p";;
$(($MovieRes<= 890)))echo "$MovieName,720p";;
$(($MovieRes<=1200)))echo "$MovieName,1080p";;
*)echo "$MovieName,DVD";;
esac >> moviefinal
誰かに役立つかもしれない同様の問題...ランダムな追加のこと私はそれが整数であることもチェックする場所で試しました、私はそれが事前に設定された値を持っていて、ユーザーが間違って入力した場合、それを変更できるようにしましたデフォルトに設定するデータ。
func_set_num_files(){
echo "How many files do you want to create? (input a number 1-10000)"
read X
# 1, is it a number, #2 is it within max range?
if [[ $X != *[!0-9]* ]]; then
if ((1<=X && X<=10000)) ;then
echo "NUM_FILES=$X"
NUM_FILES=$X
else
echo "Invalid input, setting to default value [ $NUM_FILES ].";sleep 3
fi
else
echo "Invalid input, non-numeric values entered, setting to default value [ $NUM_FILES ].";sleep 3
fi
}
「case」を使用して変数が整数の範囲内にあることを確認する別の例:
$ MAXが数値であり、50〜100であることを確認します。
case $MAX in
''|*[!0-9]*)
echo "The value $MAX is not a number !"
exit 1
;;
*)
if [ $MAX -lt 50 ] || [ $MAX -gt 100 ] ;then
echo "The value $MAX is not between 50-100"
exit 1
fi
echo "Looks like we are good !"
;;
esac