2016-10-04 17 views
0

次のbashスクリプトは、0から100までの任意の数字を入力し、数字の平均を画面に表示します。このスクリプトには、0-100とqまたはQの間の数値以外は許可されない入力検証もあります。qまたはQを入力すると、結果が計算されて画面に出力されます。また、入力検証では、入力されたヌル値、特殊文字が入力されていないこと、および数字/文字の組み合わせ、特殊文字/数字の組み合わせなどが入力されていないことを確認します。このbashスクリプトでバックスラッシュをエスケープしよう

私が持つ唯一の問題は、バックスラッシュ文字です。このスクリプトではバックスラッシュがエスケープされています。スクリプトを実行してバックスラッシュを入力すると、スクリプトは一時停止し、スクリプトを続けるためにリターンを押す必要があります。スクリプトのように見えますが、なぜそれが一時停止するのか不思議です。このサイトで私が見てきた推奨事項の多くはバックスラッシュをバックスラッシュでエスケープしていましたが、それはうまくいきません。

#! /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

read -rがバックスラッシュの問題を修正してくれてありがとう。今私は数字の後に文字qを入力することに別の問題がある、それはスクリプトを壊す。 –

+0

'A-p'は' A-P'でなければなりません。 –

+0

言い換えれば、このスクリプトで英数字のエントリをチェックして、ユーザがその番号を正しく再入力できるようにするにはどうすればよいですか? –

関連する問題