任何想法我在這個條件正則表達式中做了什麼錯誤?Bash條件正則表達式
MIN="30"
if ! [[ "$MIN" =~ [0-5]?[0-9]|\* ]]; then
echo "INVALID MINUTE"
else
echo "VALID MINUTE"
fi
感謝
* UPDATE *
你沒有包含通配符匹配。我需要做的,因爲我有需要得到滿足,以及諸如小時,一個月(更復雜的)等條件下,這種採用純正則表達式,和星期,像這樣:
[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)
即分鐘必須是數字第一和第二位的持有人或可以通配符匹配每一分鐘0 - 59
事實上,現在我看着它,這個解決方案將不會在每月的一天工作,因爲有人可以輸入39這是不是有效的本月的一天。
* UPDATE *
嗯,我並沒有完全按照你的邏輯在第一,但我認爲我對你的東西。這可能會起作用,並且會更簡單。我喜歡複雜的東西...
if ! [[ "$MIN" -gt 0 && "$MIN" -lt 59 || "$MIN" == "\*" ]]; then
我只是現在有麻煩了,它字面上評估(以及比較)的通配符。
這裏有任何想法。同時在Google上搜索。
* UPDATE *
if [ "$MIN" -gt 0 ] && [ "$MIN" -lt 59 ] || [ "$MIN" = "*" ]; then
只要再次測試,並檢查了我的語法。當MIN介於0和59之間時,它的效果很好(真),當MIN超過59時它也可以工作(報告爲false),但是隻要您嘗試將MIN設置爲一個* IF語句就會怪異並彈出:
line 340: [: *: integer expression expected
點評:你不應該使用通配符比較(如果你爲這個發明一種方式),因爲它總是「真實的」。用@Mehul Rathod來代替。 –
不記得我是如何解決這個問題的,因爲它是在一段時間之前,但我並不打算將通配符作爲運算符進行比較,而只是作爲表示通配符的配置文件中的字符。你可能是對的。我沒有考慮過這種解釋。衛生署!我只是在尋找一個包含星號的單個字符串(如果這有助於清除事情。) – Atomiklan
對不起,我不明白這一點!這個評論太大了,我添加了答案。 –