GNU/Linux >> Linux の 問題 >  >> Linux

$ replyが数値の範囲内にあるかどうかを確認しますか?

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プールのステータスを確認する方法はありますか?
Linux
  1. Linuxでタイムゾーンを確認する方法

  2. sudoers構文を確認する方法

  3. CentOS のバージョンを確認する方法

  1. Redhatのバージョンを確認する方法

  2. データベースに破損がないか確認してください

  3. du のすべての数値を合計する

  1. Linuxでディスク容量を確認する方法

  2. AlmaLinuxのバージョンを確認する

  3. 番号付きファイルの範囲を移動する