2016-10-04 32 views
0

以下bash腳本可以輸入0-100之間的數字,並將平均值輸出到屏幕。該腳本還具有輸入驗證功能,不允許輸入0-100和q或Q之間的任何數字。輸入q或Q後,計算結果並輸出到屏幕。輸入驗證還會檢查以確保沒有輸入空值,輸入特殊字符以及沒有輸入數字/字母組合,特殊字符/數字組合等。嘗試在此bash腳本中跳過反斜槓

我唯一的問題是反斜槓字符。反斜槓在這個腳本中被轉義出來,當我運行這個腳本並輸入一個反斜槓時,它會暫停,並要求您按下return使腳本繼續。似乎腳本仍然有效,但我很好奇它爲什麼會暫停。我在這個網站上看到的大部分建議都是用更多的反斜槓來反轉反斜線,但這是行不通的。

#! /bin/bash 

AVERAGE="0" 
SUM="0" 
NUM="0" 
clear 

while true; do 
    echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE; 

    if [[ "$SCORE" == *[a-pA-pr-zR-Z]* ]] || 
     [[ "$SCORE" == *['!'\\@#\$%^\&*()_+~\`\-=\[\]\{\}\|:\;\'\"\<\>,.?/\\]* ]] || 
     [[ -z "$SCORE" ]] || 
     (("$SCORE" < "0")) || (("$SCORE" > "100")) 
    then 
     echo "Be serious. Come on, try again: " 
    elif [[ "$SCORE" == [qQ] ]]; then 
     echo "Average rating: $AVERAGE%." 
     break 
    else 
     SUM=$[$SUM + $SCORE] 
     NUM=$[$NUM + 1] 
     AVERAGE=$[$SUM/$NUM] 
    fi 
done 

echo "Exiting." 
+0

也我該如何檢查任何字母數字項並提示他們重新輸入? –

回答

1

使用read -r禁用反斜槓轉義,默認情況下啓用反斜槓轉義。

Options: 
    -r do not allow backslashes to escape any characters 
+0

感謝閱讀-r解決了反斜槓的問題。現在我遇到了另一個輸入任何數字的問題,後面跟着字母q,它打破了腳本。 –

+0

'A-p'應該是'A-P'。 –

+0

換句話說,我將如何讓這個腳本檢查字母數字輸入並讓用戶正確輸入數字? –