簡體   English   中英

在UNIX / Linux腳本中,如何檢查用戶輸入的是小寫字母還是大寫字母?

[英]In a UNIX/Linux script, how can I check if the user inputs a lowercase letter or uppercase letter?

這是我到目前為止為腳本編寫的代碼:

# 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

我曾嘗試對大寫和小寫評估執行不同的操作,但是無論我做什么,似乎當用戶輸入大寫字母時,它將始終評估為小寫= true,反之亦然。 為什么這不起作用?

您處在正確的軌道上,但無需將自己限制在單個字符輸入范圍內。 您可以輕松處理帶有POSIX兼容外殼功能和expr作為第一個位置參數給出的字符串的處理。 雖然速度不如bash的字符串索引 ,你可以使用$(expr substr string start length)的字符串從一個循環中循環返回每個字符1string_lengthstart1length

例如:

#!/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

您可以根據需要調整稱為special字符的內容。 如果您的外殼中沒有C樣式的循環,則可以使用一個計數器和while循環來完成相同的事情,例如

i=1
while [ "$i" -le "$len" ]; do               ## while i=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
    ((i++))
done

我想出了一種使開關工作並評估大小寫字母的方法。 Yi發布的鏈接是一個類似的問題,但是我嘗試了這些建議,但仍然無法使我的腳本正常工作。 安裝pax並使用它可能會奏效,但是我在安裝時遇到了錯誤,而且要完成一個小任務,它是一個很大的安裝包。

這是我所做的:

我替換了以下幾行:

[a-z]      )   echo "Lowercase letter";;
[A-Z]      )   echo "Uppercase letter";;

有了這個:

[abcdefghijklmnopqrstuvwxyz]      )   echo "Lowercase letter";;
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]      )   echo "Uppercase letter";;

看起來可能有點愚蠢,可能並不漂亮,但是嘿,它可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM