文字/単語ではなく正数のみを許可するスクリプトを作成する必要があります。
私は2つのif条件を作成しましたが、一緒に動作しません。 1つを削除すると、もう1つはうまく機能します。どのように接続しますか?
if [[ ${@:2} -lt 0 ]]; then
shift
echo "error, only positive"
exit 3
fi
if [[ ${@:2} == [a-zA-Z] ]]; then
echo "error, no letters allowed"
exit 4
fi
私のスクリプトは次の行で実行されます。
./script.sh file.txt arg1 arg2 arg3 ...
したがって、arg1、arg2は-1またはaにはできません。
答え1
おそらくすべてのパラメータを繰り返し、それぞれをテストする必要があります。両方をテストできる場合は、次のようにできます。これにより、すべてのパラメータに数字のみがあることを確認できます(したがって、または-
文字はありませんが文字はありません。小数点以下)
pattern='[^0-9]'
for arg; do
if [[ $arg =~ $pattern ]]; then
printf 'Unacceptable option: %s\n' "$arg"
exit 3
fi
done
別々のテストに異なるエラーメッセージと終了コードが含まれるようにするには、for
ループとテストでこれを実行できますarg
。これにより、各コマンドラインオプションが順番に表示されます。
答え2
次のようにbash比較演算子を利用することもできます。
if [ $arg -eq $arg -a $arg -ge 0 ] 2>/dev/null ;then
echo "accepted"
else
echo "not accepted"
fi
秘密は、2つの引数を-eqと比較すると、bashがエラーを生成することです(私たちは/ dev / nullに送ります)。