[英]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)
的字符串從一個循環中循環返回每個字符1
至string_length
為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
您可以根據需要調整稱為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.