私が作成したいスクリプトは、ユーザーにパスワードを要求する必要があります。次に、パスワードに大文字、文字、数字が含まれていることを確認します。
迷子になってインターネット検索を始める前に、それはすべてでした。
#!/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
拡張型で作成する必要があります。- hashbangを使用しているため、
#!/bin/sh
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