bash
スクリプトの数が0
(0)か正の整数であるかをテストする方法は?
答え1
一般的なイディオムは、変数の値が数値でのみ構成されていることを確認することです。最新のbashシェルでは=~
正規表現を使用できます。
zero_or_positive_integer(){
for i in "$@"; do
if [[ "$i" =~ ^[0-9]+$ ]]; then
echo "YES $i is either 0 or a positive integer"
else
echo "NO $i is neither 0 nor a positive integer"
fi
done
}
結果:
$ zero_or_positive_integer foo -2 1.5 0 12
NO foo is neither 0 nor a positive integer
NO -2 is neither 0 nor a positive integer
NO 1.5 is neither 0 nor a positive integer
YES 0 is either 0 or a positive integer
YES 12 is either 0 or a positive integer
答え2
テストするには通常、[
or[[
演算子が使用されます。[
命令の同義語ですtest
(Bashの一部ではありません)。
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
$ man test
[...]
INTEGER1 -eq INTEGER2
INTEGER1 is equal to INTEGER2
INTEGER1 -ge INTEGER2
INTEGER1 is greater than or equal to INTEGER2
[...]
したがって、書くことができるように見えます(スペースを忘れないでください。[
ただ組み込みのものなので、引数を分離してください)。
if [ "$var" -eq 0 ]; then
echo "Zero"
elif [ "$var" -gt 0 ]; then
echo "Positive"
fi
$var
整数でないとエラーが発生することに注意してください。私たちは$var
それがすでに整数であると仮定します。
$var
これが整数かどうかわからない場合は、これが良いテストであるかどうかわからないため、正規表現を使用するコードは次のようになります。
if [[ "$var" =~ ^[1-9][0-9]+$ ]]; then
echo "Positive"
elif [[ "$var" = 0 ]]; then
echo "Zero"
else
echo "Other"
fi
答え3
Bashprintf
組み込み関数は文字列を読み取り、フォーマット文字列で指定されているとおりに正常に変換できることを確認します。 「${?}」のステータスを確認し、 を使用-v
して一時変数に値を入力し、 を使用してエラーメッセージを削除できます2>/dev/null
。
$ a=-56
$ printf -v q '%d' "${a}"; echo $? "${q}"
0 -56
$ a=-56.3
$ printf -v q '%d' "${a}"; echo $? "${q}"
bash: printf: -56.3: invalid number
1 -56
$ a=315.8e4
$ printf -v q '%d' "${a}"; echo $? "${q}"
bash: printf: 315.8e4: invalid number
1 315
$ printf -v q '%f' "${a}"; echo $? "${q}"
0 3158000.000000