[英]Problem with comparison for checking that a string contains only digits in a bash shell script
我不得不修改一個 bash shell 腳本,但我對 bash shell 腳本沒有太多經驗(我使用過許多其他語言,但對 shell 腳本編寫的不多)。
該腳本顯示一個帶有“X”項的菜單,然后提示用戶輸入一個數字。
用戶輸入數字后,我認為腳本會檢查輸入的數字/字符串以確保它是數字(我認為),然后檢查數字是否在某個值范圍內。
我想要更改的部分內容是菜單中的項目數,最初有 9 個項目,但我需要再添加 10 個左右。 如果輸入的數字超過 1 位,則檢查似乎失敗。
這是它進行檢查的片段:
while menu && read -rp "$prompt" num && [[ "$num" ]]; do
if [[ "$num" == [[:digit:]] ]] && [[ $num -gt 0 ]] && [[ $num -le ${#service_accounts[@]} ]]; then
我認為失敗的“如果”部分是:
[[ "$num" == [[:digit:]] ]]
如果 $num 中的字符串超過 1 位,有人能告訴我比較會失敗嗎?
而且,如果是這種情況,即使 $num 超過 1 位,我該如何更改該比較以使其正常工作?
對不起,如果這是一種奇怪的問題:(!!而且,提前致謝!
吉姆
[[ "$num" == [[:digit:]] ]]
失敗,除了一位數之外的所有內容。
這使您的腳本能夠接受一到兩位數字:
[[ "$num" =~ ^[[:digit:]]{1,2}$ ]]
=~
將 $num 與正則表達式^[[:digit:]]{1,2}$
。
請參閱:堆棧溢出正則表達式常見問題解答
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.