以下のように変数が4桁以上かどうかをテストしたいと思います。
#!/bin/bash
if [ $input has more than 4 digits ]; then
echo " * Please only 4 digits" >&2
echo""
else
the other option
fi
ベストアンサー1
(数値ではなく)ビット数に興味がある場合は、Bash / Ksh / Zshの正規表現と一致させることができます(*脚注を参照[[:digit:]]
)。
#!/bin/bash
input=$1
re='^[[:digit:]]{1,4}$'
if [[ $input =~ $re ]]; then
echo "'$input' contains 1 to 4 digits (and nothing else)"
else
echo "'$input' contains something else"
fi
または、たとえば、[[ $input =~ ^[[:digit:]]{5,}$ ]]
「5つ以上の数字(他の数字なし)」などを確認します。
case
または、純粋なPOSIXシェルではパターンマッチングを使用する必要があります。
#!/bin/sh
input=$1
case $input in
*[![:digit:]]*) onlydigits=0;; # contains non-digits
*[[:digit:]]*) onlydigits=1;; # at least one digit
*) onlydigits=0;; # empty
esac
if [ $onlydigits = 0 ]; then
echo "'$input' is empty or contains something other than digits"
elif [ "${#input}" -le 4 ]; then
echo "'$input' contains 1 to 4 digits (and nothing else)"
else
echo "'$input' contains 5 or more digits (but nothing else)"
fi
(すべてのロジックを中に入れることができますがcase
、if
そこに入れ子にするのは私の考えには少し見苦しいです。)
これは[[:digit:]]
現在のロケールの「数値」の概念と一致する必要があります。これはASCII番号を超えることも、超えないこともあります0123456789
。私のシステムでは、[[:digit:]]
⁴(上付きの4、U + 2074)は一致しませんが、[0-9]
一致します。他の「数字」を一致させることは問題になる可能性があります。シェルの数に対して算術演算を実行する場合。したがって、より厳密に適用するには、[0123456789]
ASCII番号のみを許可を使用してください。