如何在 Linux shell 中检查数字输入?

如何在 Linux shell 中检查数字输入?

我想检查 shell 脚本上的输入是字母字符还是字符。我怎样才能做到这一点?

答案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

是为了检查这一点。然而,对于大多数 shell,如果$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

虽然其他答案都很好,但这里有一个一行解决方案

grep -q '^[[:alnum:]]*$' <<< "$mybar" && success_command || failure_command

如果您想在空字符串上返回 do failure 命令,请使用以下命令

grep -q '^[[:alnum:]]\+$' <<< "$mybar" && echo "success" || echo "failure"

相关内容