Linuxシェルで数値入力を確認するには?

Linuxシェルで数値入力を確認するには?

シェルスクリプトの入力がアルファベット文字か文字かを確認したいと思います。どうすればいいですか?

答え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"

関連情報