STR
Linuxでシェルスクリプトを確認し、「文字のみ」が含まれているか「数字のみ」が含まれている場合は終了しようとします。数字と文字の両方が含まれている場合はSTR
合格する必要があります。特殊文字は含まれません。
似たようなことを試していますが、部分的にしか機能しません。
#!/bin/sh
STR=$1
if [[ ! $STR =~ ^[[:alnum:]]*[[:alpha:]][[:alnum:]]*$ ]]; then
echo "The input must contain both digits and alphabets like abc123"
exit 1
fi
echo "Success"
exit 0
小切手が部分的に有効です。つまり、STR
数字のみが含まれています。しかし、STR
すべての文字が含まれている場合は動作しません。文字と数字(たとえば、または)が含まれている場合にのみ実行したくありませんexit 1
。STR
abc123
ABC123
STR
含まれていると検査は失敗しますabc
。
STR
含まれている場合にabc
のみチェックが機能するようにするにはどうすればよいですか?STR
123
ベストアンサー1
ここでは複雑な正規表現を使用する必要はありません。 2つの条件があるので、2つのテストを使用してください。
if [[ $str == *[[:digit:]]* ]] &&
[[ $str == *[[:alpha:]]* ]]
then
printf '"%s" contains both letters and digits\n' "$str"
else
printf '"%s" lacks either letters or digits\n' "$str"
fi
「特殊文字」も言及しましたが、その文字が何であるかを指定しませんでした。文字を[[:punct:]]
次のように一致させることを意味するとします。いいえこれを文字列にしたい場合は、次のものを使用できます。
if [[ $str == *[[:digit:]]* ]] &&
[[ $str == *[[:alpha:]]* ]] &&
[[ $str != *[[:punct:]]* ]]
then
printf '"%s" contains both letters and digits, and no specials\n' "$str"
else
printf '"%s" lacks either letters or digits, or contains specials\n' "$str"
fi
[[:punct:]]
文字列のすべての文字と一致します。
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~