Linux - 检查用户是否输入了数字和字母

Linux - 检查用户是否输入了数字和字母

我尝试创建的脚本应要求用户输入密码。然后将检查该密码是否包含大写字母、字符和数字

这就是我在迷路并开始谷歌搜索方法之前所拥有的一切

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

您的代码存在一些问题:

  1. [[和之间需要有一个空格password
  2. password将是一个变量,因此需要写成$password展开
  3. 您正在使用#!/bin/shhashbang,因此 bash 扩展测试 ( [[) 可能不可用
  4. 您仅检查密码是否包含数字

我认为最好有一个函数来检查密码是否满足您的要求并提出以下内容:

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

相关内容