我尝试创建的脚本应要求用户输入密码。然后将检查该密码是否包含大写字母、字符和数字
这就是我在迷路并开始谷歌搜索方法之前所拥有的一切
#!/bin/sh
echo "Please enter a password containing numbers and letters"
read password
if [[password =~ [0-9] ]]
then
echo "Successful"
else
echo "Fail"
fi
答案1
您的代码存在一些问题:
[[
和之间需要有一个空格password
password
将是一个变量,因此需要写成$password
展开- 您正在使用
#!/bin/sh
hashbang,因此 bash 扩展测试 ([[
) 可能不可用 - 您仅检查密码是否包含数字
我认为最好有一个函数来检查密码是否满足您的要求并提出以下内容:
#!/bin/sh
chk_pass () {
local pass=$1
# Check if password contains uppercase
printf '%s' "$pass" | grep -q '[A-Z]' || return 1
# Check if password contains lowercase
printf '%s' "$pass" | grep -q '[a-z]' || return 1
# Check if password contains numbers
printf '%s' "$pass" | grep -q '[0-9]' || return 1
# Check if password contains special characters
printf '%s' "$pass" | grep -q '[^a-zA-Z0-9 \t]' || return 1
return 0
}
printf '%s\n' 'Please enter a password containing at least one number, one uppercase letter, one lowercase letter, and one special character: '
read -rs
if chk_pass "$REPLY"; then
printf '%s\n' 'Success'
else
printf '%s\n' 'Error: Password must contain one number, one uppercase letter, one lowercase letter, and one special character!' >&2
fi
笔记:
grep
函数中的最后一个实际上只是检查密码是否包含字符以外字母数字或空格。读取选项将保留反斜杠字符
读取选项将隐藏用户输入(对于密码输入很有用 )-r
-s