シェルスクリプトの入力がアルファベット文字か文字かを確認したいと思います。どうすればいいですか?
答え1
あなたの質問はかなりあいまいなので、次のように推測してみましょう。
#!/bin/bash
input=$1
if [[ -z "$input" || $input == *[^[:digit:]]* ]]; then
echo "your input '$input' is not a number" >&2
exit 1
fi
echo "congrats, '$input' is a number"
Bashでは、[[...]]
演算子は内部的==
にパターンマッチングオペレーターだから私たちはそこから数字ではなく文字を探しています。
答え2
入力が$ VARの場合...
if [ -z "${VAR//[0-9]/}" -a ! -z "$VAR" ]; then
echo only has digits
fi
答え3
アルファベット文字を確認するには:
case $input in
([[:alpha:]]) echo one alpha character;;
(*) echo 'non-alpha or not one character (or non-character)';;
esac
ロケールの文字セット/エンコードに従って文字をデコードし、ロケールを再度照会して、その文字があるかどうかを確認します。アルファベット順にキャラクタークラス。
$input
キャラクターなのか確認する方が難しいです。
case $input in
(?) echo one character
esac
これを確認することです。ただし、ほとんどのシェルでは、$input
有効な文字を形成しないバイトが含まれていてもtrueが返されます。この問題を解決するには、次の操作を行います。
case $input in
([[:alpha:]]) echo one alpha character;;
(?)
n_chars=$(($(printf %s "$input" | wc -m)))
if [ "$n_char" -eq 1 ]; then
echo one character
else
echo one byte that is not a character
fi;;
("") echo empty;;
(*) echo anything else
esac
答え4
他の答えはすべて良いですが、ここに1つあります。一行解決策
grep -q '^[[:alnum:]]*$' <<< "$mybar" && success_command || failure_command
空の文字列に対して失敗コマンドを返すには、次のコマンドを使用します。
grep -q '^[[:alnum:]]\+$' <<< "$mybar" && echo "success" || echo "failure"