For*_*kie 1 shell scripting bash shell-script
这是我写的代码。我需要一个简单的代码,使用 if elif 来检查读取的字符是大写、小写还是特殊符号。
echo "enter a char"
read c
if [[ $c == [A-Z] ]];
then
echo "upper"
elif [[ $c == [a-z] ]];
then
echo "lower"
else
echo "Digit or special symbols!"
fi
Run Code Online (Sandbox Code Playgroud)
以下是我输入字符后收到的输出
enter a char
A
upper
enter a char
a
Digit or special symbols!
aravind@bionic-beaver:~/Desktop$ ./1.sh
enter a char
1
Digit or special symbols!
Run Code Online (Sandbox Code Playgroud)
除非你清空$IFS并添加-r选项,否则read以一种非常特殊的方式读取一行输入。
例如,如果用户输入" \\x ",默认值为$IFS,$c将包含x,而不是用户输入的内容。
也不[a-z]匹配小写字母,它匹配语言环境中a和之间的任何类型z(shell 之间的行为存在一些差异。例如,在bash许多语言环境中,包括 A 和 Y 之间的英文字母)。它甚至可以匹配某些语言环境和某些工具中的字符序列。
在这里,您可能想要:
\nprintf >&2 \'Please enter a character: \'\nIFS= read -r c\ncase $c in\n ([[:lower:]]) echo lowercase letter;;\n ([[:upper:]]) echo uppercase letter;;\n ([[:alpha:]]) echo neither lower nor uppercase letter;;\n ([[:digit:]]) echo decimal digit;;\n (?) echo any other single character;;\n ("") echo nothing;;\n (*) echo anything else;;\nesac\nRun Code Online (Sandbox Code Playgroud)\n(该语法是 POSIXsh语法,您甚至不需要安装bash)。
如果您想将其限制为英文字母(拉丁字母中没有变音符号的字母),您需要单独命名它们:
\n([abcdefghijklmnopqrstuvwxyz]) echo English lowercase letter;;\nRun Code Online (Sandbox Code Playgroud)\nexport LC_ALL=C或者在语句之后read和之前将语言环境修复为 C case,但(?)测试将无效,因为它可能错误地将某些字符解释为字符序列。例如,UTF-8\xc3\xa9在 C 语言环境中将被视为两个字符。
| 归档时间: |
|
| 查看次数: |
31576 次 |
| 最近记录: |