Linux用のシェルスクリプトをBashを使用して作成し、ビデオファイルをMP4に変換しています。そのために、私は avconv
を使用しています libvorbis
を使用 オーディオ用。
スクリプト内で、ユーザーに質問があります:
read -p "- Audio Quality [scale from -2 to 10] ? "
if [ -n "$REPLY" ] ; then
ABITRATE="-aq $REPLY"
fi
私の「ABITRATE」文字列は、最後の avconv
に入ります コマンドライン。
しかし、私はユーザーにKb(Kilobit)の値でその質問に答える機会を与え、それを libvorbis
のスケールに変換したいと思います。 使用します。
「-2から10までのスケール」はこれです:
Quality Kbit/s Normalization
-----------------------------
-2 ~32 y
-1 ~48 y
0 ~64 y
1 ~80 y
2 ~96 y
3 ~112 y
4 ~128 n
5 ~160 n
6 ~192 n
7 ~224 n
8 ~256 n
9 ~320 n
10 ~500 n
$REPLYが数値の範囲内にあるかどうかを確認する方法を知りたいのですが。たとえば、スクリプトで次のようなことをしたいと思います:
if [ $REPLY is a number between 1 and 32 ] ; then
REPLY="-2"
elif [ $REPLY is a number between 33 and 48 ] ; then
REPLY="-1"
fi
これは可能ですか(「はい、もちろん難しいことではありません」と言いたいのですが、使用する構文がわかりません)?
承認された回答:
[コード> コマンド/シェルビルトインには比較テストがあるので、あなたはただ行うことができます
if [ "$REPLY" -ge 1 ] && [ "$REPLY" -le 32 ]; then REPLY=-2;
elif [ "$REPLY" -ge 33 ] && [ "$REPLY" -le 48 ]; then REPLY=-1; fi
ここで、 -ge
以上(など)を意味します。 [コード> コマンドは単なるコマンドであり、特別な構文ではありません(実際には
test
と同じです) : man test
をチェックしてください )、そのため、その後のスペースが必要です。 [$ REPLY
と書く場合 [$ REPLY
という名前のコマンドを見つけようとします 実行しますが、機能しません。 ]
を閉じる場合も同様です。 。
ここでは、 &&
を使用しています 最初のコマンドが成功した場合にのみ2番目のコマンドを実行するシェル演算子。 [コード>
-a
もサポートします および 2つのテストがありますが、これは非推奨であり、引数を確実に解析できなくなるため、使用しないでください。
編集:数値が整数であるかどうかをテストするには(コードで整数が発生する可能性がある場合)、最初にテストを実行します
if [[ "$REPLY" =~ ^[0-9]+$ ]]; then
existing code
else echo "$REPLY is not an integer" >&2 && exit 1; fi
もちろん、これらの角かっこ式はすべて0(true)または1(false)を返し、組み合わせることができます。すべてを同じブラケットに入れることができるだけでなく、行うこともできます
if [[ "$REPLY" =~ ^[0-9]+$ ]] && [ "$REPLY" -ge 1 ] && [ "$REPLY" -le 32 ]; then ...
または同様のもの。
関連:Dhcpd:dhcpプールのステータスを確認する方法はありますか?