この条件付き正規表現で何が間違っていたのか分かりますか?
MIN="30"
if ! [[ "$MIN" =~ [0-5]?[0-9]|\* ]]; then
echo "INVALID MINUTE"
else
echo "VALID MINUTE"
fi
ありがとう
* アップデート *
ワイルドカードの一致が含まれていませんでした。時間、月(より複雑)、曜日など、満たす必要がある他の条件があるため、純粋な正規表現を使用してこれを行う必要があります。
[1-2]?[0-9]|\* - This is for hour
[1-3]?[0-9]|\* - This is for day of month
1?[0-9]|\* - This is for month of year
[0-7]|\* - This is for day of week (0 = sunday etc)
つまり、分は 1 位と 2 位の保持者の数字である必要があります。または、可能なすべての分に一致するようにワイルドカードにすることもできます 0 - 59
実際、今見てみると、誰かが有効な日ではない 39 を入力する可能性があるため、このソリューションは月の日には機能しません。
* アップデート *
最初はあなたの論理に完全には従っていませんでしたが、あなたは何かを理解していると思います。これは実際に機能する可能性があり、より簡単になります。私は物事を複雑にするのが好きです...
if ! [[ "$MIN" -gt 0 && "$MIN" -lt 59 || "$MIN" == "\*" ]]; then
ワイルドカードを文字通り評価する(よく比較する)のに問題があります。
ここに何か考えがあります。とりあえずググる。
* アップデート *
if [ "$MIN" -gt 0 ] && [ "$MIN" -lt 59 ] || [ "$MIN" = "*" ]; then
もう一度テストして、構文を確認しました。MIN が 0 から 59 の間の場合はうまく機能し (true)、MIN が 59 を超える場合も機能します (false を報告します)。ただし、MIN を * に設定しようとするとすぐに、IF ステートメントがフリークしてポップアウトします。
line 340: [: *: integer expression expected