以下是我目前为脚本编写的代码:
# This program displays the character type if given as argument.
#
if [ $# -ne 1 ]
then
echo Usage: $0 char # $0 is program name
exit 1
fi
# If the user enters more than one character, we will have problems.
# Make sure that the only one character is typed.
#
chars=$1
case $chars in
[0-9] ) echo "digit";;
[a-z] ) echo "Lowercase letter";;
[A-Z] ) echo "Uppercase letter";;
? ) echo "Special character";;
* ) echo "Please enter a single character";;
esac
我尝试使用大写和小写评估做不同的事情,但似乎无论我做什么,当用户输入大写时,它总是评估为lowercase = true,反之亦然。任何人都知道为什么这不起作用? 感谢
答案 0 :(得分:0)
好的,所以我找到了一种方法来使开关工作并评估大写和小写字母。易 - 感谢您的建议,您发布的链接也是一个类似的问题,但我尝试了这些建议但仍无法让我的脚本运行。安装pax并使用它可能会有效,但我在安装时遇到了错误,而且它是一个很大的软件包来安装来完成这个小任务。 这是我做的:
我替换了这些行: [a-z])echo"小写字母&#34 ;;; [A-Z])echo"大写字母&#34 ;;;
有了这个: [abcdefghijklmnopqrstuvwxyz])echo"小写字母&#34 ;;; [ABCDEFGHIJKLMNOPQRSTUVWXYZ])echo"大写字母&#34 ;;;
看起来有点傻,可能不太漂亮,但嘿,它有效。
答案 1 :(得分:0)
您走在正确的轨道上,但没有必要将自己局限于单个字符输入。您可以轻松处理作为第一个位置参数的字符串处理,其中包含符合POSIX标准的shell功能和expr
。虽然没有bash 字符串索引那么快,但您可以使用$(expr substr string start length)
返回字符串循环中的每个字符,并使用1
到string_length
的循环作为{{ 1}} start
为1
。
例如:
length
示例使用/输出
#!/bin/sh
# This program displays the character type of each character contained
# in the first argument (positional parameter).
if [ -z "$1" ]
then
echo Usage: ${0##*/} string # ${0##*/} is program name w/o path
exit 1
fi
string="$1" ## any number of chars
len=${#string} ## length of first positional parameter
for ((i = 1; i <= len; i++)); do ## C-style for, 1 - len
char=$(expr substr "$string" "$i" "1") ## get the char at index $i
case "$char" in
[0-9] ) echo "'$char' - digit";;
[a-z] ) echo "'$char' - Lowercase letter";;
[A-Z] ) echo "'$char' - Uppercase letter";;
? ) echo "'$char' - Special character";;
* ) echo "'$char' - Unrecognized character";;
esac
done
您可以根据需要调整所谓的$ sh classifychar.sh "My dog has 123 fleas."
'M' - Uppercase letter
'y' - Lowercase letter
' ' - Special character
'd' - Lowercase letter
'o' - Lowercase letter
'g' - Lowercase letter
' ' - Special character
'h' - Lowercase letter
'a' - Lowercase letter
's' - Lowercase letter
' ' - Special character
'1' - digit
'2' - digit
'3' - digit
' ' - Special character
'f' - Lowercase letter
'l' - Lowercase letter
'e' - Lowercase letter
'a' - Lowercase letter
's' - Lowercase letter
'.' - Special character
字符。如果你的shell中没有C风格的循环,你可以使用计数器和special
循环来完成同样的事情,例如。
while