在UNIX / Linux脚本中,如何检查用户是否输入小写字母或大写字母?

时间:2017-04-24 03:01:25

标签: linux unix scripting

以下是我目前为脚本编写的代码:

# 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,反之亦然。任何人都知道为什么这不起作用? 感谢

2 个答案:

答案 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)返回字符串循环中的每个字符,并使用1string_length的循环作为{{ 1}} start1

例如:

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