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. hashbangを使用しているため、#!/bin/shbash拡張テスト([[)を使用できない可能性があります。
  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

関連情報