基本的なスクリプトヘルプ(続き)

基本的なスクリプトヘルプ(続き)

次の手順では、入力した数字が実際に数字であることを確認するか、スクリプトを終了して数字を要求する必要があります。コードはShellCheckでは問題ないようですが(エラーはありません)、何を入力しても数字を入力していないと仮定してスクリプトを終了します(良いニュース、終了が機能します)。

#!/bin/bash
echo "Please input a whole number"
read -r num1

if [ "$num1" = [0-9] ]; then
    echo "Please input another whole number" 
    read -r num2;
else
    echo "Please enter a whole number only";
    exit
fi 

if [ "$num2" = 0-9 ]; then
    echo "Please input function: [a] for addition, [s] for subtraction, [m] for multiply, or [d] for divide";
    read -r func
else
    echo "Please enter whole number only" 
    exit 
fi

if [ "$func" = "a" ]; then
    echo "The sum of the two numbers is " $((num1 + num2))
elif [ "$func" = "s" ]; then
    echo "The difference of the two numbers is " $((num1 - num2))
elif [ "$func" = "m" ]; then
    echo "The product of the two numbers is "$((num1 * num2))
elif [ "$func" = "d" ]; then
    echo "The quotient is (part of answer here) with a whole number remainder of (answer her) "$((num1 / num2))
else
    echo "Please select only [a] for addtion, [s] for subtration, [m] for multiply, or [d] for divide"
fi 

ベストアンサー1

私は正規表現と一致させるために等価演算子を使用しようとしましたが、うまくいきませ=ん。また、正規表現の比較をサポートしていないものを使用しているので、[それを使用する必要があります[[ ... ]]。コードの残りの部分が機能しても試みる正規表現は、少なくとも1つの数字を含むすべての文字列と一致します(つまり、同様の数字だけでなく同様の123非数字も一致しますabc123xyz)。

次のようにしてみてくださいnum1

while read -p 'Please input a whole number: ' -r num1 ; do
  if [[ $num1 =~ ^[0-9]+$ ]] ; then 
    break
  else
    echo "Invalid input, try again."
  fi
done

そして同様のことをしてnum2。たぶんfunc正規表現で使用することもできます^[asmd]$

これは、ループ内のエントリ(たとえば、^[0-9]$正規表現との成功した一致)がループを終了するまで(実行など)break永久に繰り返されます。

または少し短いです。

while read -p 'Please input a whole number: ' -r num1 ; do
  [[ $num1 =~ ^[0-9]+$ ]] && break || echo "Invalid input, try again."
done

test-something && what-to-do-if-true || what-to-do-if-falseこれは、簡単なテストのために設定全体を入力したくない場合にif/then/else/fi便利なショートカットです。 if/then/else/fi でより多くの操作を実行できますが、成功または失敗時に 1 つの操作しか実行できない場合に便利です。ちなみに、この|| what-to-do-if-false部分はオプションであり、それを使用できるさまざまな変形方法があります。

実行するすべてのコマンドは、ゼロ(真/成功)または非ゼロ(偽/失敗/エラー)終了コードで終了します。ゼロ以外の終了コードの範囲は1から255までで、エラーの種類を示すことができます(「ファイルが見つかりません」または「アクセス拒否」など)、一般的に使用されるいくつかの終了コードがありますが、終了コードとその意味は主に以下の事項により異なる。実行中のプログラム)。したがって、この短い条件付きテストを使用すると、前のコマンドが成功した場合にのみコマンドが実行されることを確認できます。例えば

cd mydir && rm myfile

または

grep -q regex file.txt || mv file.txt /some/directory/

成功した場合にのみrm実行されcdfile.txt成功した場合にのみ移動されます。いいえ含むregex

おすすめ記事