我堅持使用我的 bash 代碼。并需要一些幫助。我試圖撰寫 bash 代碼:長度 - 最少 10 個字符。包含字母和數字。包括小寫和大寫字母。如果通過驗證,則將輸出著色為綠色,如果未通過,則將輸出著色為紅色。如果通過驗證,則回傳退出代碼 0,如果沒有,則回傳退出代碼 1。,對我來說可以解決的問題是代碼不檢查大小寫。并且有 exit 0,這意味著密碼在所有情況下都可以。
# Color for Output
Warning='\033[0;31m' # Red
Success='\033[0;32m' # Green
NC="\033[0m" # No Color
password=$1
len="${#password}"
if test $len -ge 4 ; then
echo "$password" | grep -eq [[:digit:]]
if test $? -eq 1 ; then
echo "$password" | grep -e [[:upper:]]
if test $? -e 1 ; then
echo "$password" | grep -e [[:lower:]]
if test $? -e 1 ; then
printf "${Success}Strong password!$1\n"
else
echo "weak password include lower case char"
fi
else
echo "weak password include capital char"
fi
else
echo && echo $?
printf "${Success}Strong password!$1\n"
fi
else
echo $?
printf ${Warning}"Try again... \nPassword must have at least 10 characters.$1\n"
fi
uj5u.com熱心網友回復:
在 bash 中,在[[ ... ]]條件中,==and!=運算子進行模式匹配。bash 模式可以包含 POSIX 字符類。
error() {
echo "$*" >&2
exit 1
}
password=$1
if (( ${#password} < 10 )); then
error "Too short"
elif [[ $password != *[[:digit:]]* ]]; then
error "Does not contain a digit"
elif [[ $password != *[[:lower:]]* ]]; then
error "Does not contain a lower case letter"
elif [[ $password != *[[:upper:]]* ]]; then
error "Does not contain an upper case letter"
fi
echo "OK"
exit 0
POSIX 字符類的串列記錄在手冊的3.5.8.1 模式匹配中
級聯-if 可以寫得更簡潔:
(( ${#password} >= 10 )) || error "Too short"
[[ $password == *[[:digit:]]* ]] || error "Does not contain a digit"
[[ $password == *[[:lower:]]* ]] || error "Does not contain a lower case letter"
[[ $password == *[[:upper:]]* ]] || error "Does not contain an upper case letter"
echo OK
[[ ... ]]還有=~正則運算式匹配運算子(沒有!~否定匹配運算子):
# it contains a digit, or error
[[ $password =~ [[:digit:]] ]] || error "Does not contain a digit"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/484250.html
