如何检查用户是否输入了一个字母?

时间:2015-06-14 04:54:10

标签: bash shell

我正在读一个角色,想要检查这是否是单个字符并且是一个字母。我的代码如下:

#!/usr/bin/bash
read -p "Enter something: " char
if [[ ${#char} != 1 && "$char" != *[a-z]* ]]; then
    echo "Not a valid input"
else
    echo "Its a valid input"
fi

o / p如下:

[root@host-7 ~]# sh -x t
+ read -p 'Enter something: ' char
Enter something: 1
+ [[ 1 != 1 ]]
+ echo 'Its a valid input'
Its a valid input

执行脚本时,只有第一个条件被执行而它没有检查第二个条件。

3 个答案:

答案 0 :(得分:1)

它没有评估第二个条件,因为第一个条件失败,因为您在输入中只输入了一个字符,并且在两个条件之间存在&&

如果您输入ab之类的2个字符输入,那么您将看到两个条件都得到评估。

您可以使用-n1限制输入到一个字符,如下所示:

#!/usr/bin/bash

read -n1 -p "Enter something: " char
echo
if [[ "$char" != *[a-z]* ]];then
   echo "Not a valid input"
else
   echo "Its a valid input"
fi

并按以下方式运行:

bash -x ./t

答案 1 :(得分:1)

如果您希望测试单个字母,可以使用POSIX字符类[[:alpha:]]或等效[a-zA-Z]。无需检查长度或使用通配符作为单个bash模式,只会在使用extglob可选patterns时测试多次匹配。

read -p "Enter something: " char
if [[ $char != [[:alpha:]] ]]; then
    echo "Not a valid input"
else
    echo "It's a valid input"
fi

答案 2 :(得分:0)

您只需将if语句更改为:

即可
if [[ $char != [a-zA-Z] ]]; then

它将检查$char是否是单个字符并且是一个字母(a-z,A-Z)。

示例:

#!/bin/bash
read -p "Enter something: " char
if [[ $char != [a-zA-Z] ]]; then
    echo "Not a valid input"
else
    echo "Its a valid input"
fi

输出将如下:

ab : inavlid
a  : valid
1  : invalid
12 : invalid
A  : valid
AB : invalid