範囲の数が<0、無限大かどうかをテストします。

範囲の数が<0、無限大かどうかをテストします。

質問があります。

If [[ * ]]
then
continue

else
exit 1
fi

-d 3たとえば、私のスイッチの引数が有効な正の10進整数(からの1つ以上のASCII文字シーケンス)であるかどうかをテストしたいと思います。それ以降は数字のみ可能です。他のすべてはひどいです。代わりに何を入れるべきかわかりません。09-d[0,infinity)*

助けてください?-d位置の後のパラメータです$2

答え1

質問と意見では負ではなく整数で$2なければなりません。

if [[ "$2" =~ ^[0-9]+$ ]]
then
...

また、if小文字で書かれていることに注意してくださいi

使用しているBashのバージョンが正規表現(<3.x)をサポートしていない場合は、次のようにgrep困難な作業を実行できます。

if printf "%s\n" "$2" | grep -qE '^[0-9]+$'
then
...

しかし見てくださいスティーブンのコメントこのアプローチには注意があるかもしれません。

答え2

Bourneのようなシェルの場合(つまり、1970年代にさかのぼる):

case $2 in
  "" | *[!0-9]*) echo >&2 not OK; exit 1;;
  *) echo OK;;
esac

関連情報