2017-07-12 29 views
1

私は自分自身を教えていますbashおそらくロジックのエラー

どうすればこの作品を作れますか?

あなたは特別なを入力しようとすると、3つのチェックポイント...空白行、特殊文字との最大の数より1未満と大きい ない数字は、第三チェックポイントで、

があります。キャラクターは、カードの家のように全体が崩れ落ちる。

ユーザーが空白行を入力せず、特殊文字がなく、1より小さい数字がなく、あらかじめ決められた最大数値よりも大きい数字を入力しないようにするにはどうすればよいですか? aのような「通常」の文字と「特別な」文字のように区別する必要はありません、行番号ことになっている場合LINE_NUMBER

# First checkpoint 
# No blank lines accepted as input 
while [[ -z "$line_number" ]] ; 
do 
echo 
echo "Line number can not be blank." 
echo 
read -p "Please enter a valid line number? " line_number 
echo 
done 

# Second checkpoint 
# No special characters allowed as input 
# Escaping the backtick or accent grave requires three back slashes before the backtick 
while [[ $line_number == *['!'@#\$%^\&*()_+?~-\"\\\`]* ]] ; 
do 
echo 
echo "No special characters allowed" 
echo 
read -p "Please enter a valid line number? " line_number 
echo 
done 

# Third checkpoint 
# No number less than 1 and greater than the $total_line_number 
while [[ $line_number -lt 1 || $line_number -gt $total_line_number ]] ; 
do 
echo 
echo -e "Line number can not be lesser than 1$ and bigger than    $total_line_number." 
echo 
read -p "Please enter a number between the 1 and $total_line_number scope? " line_number 
echo 
done 

答えて

3

は、「行番号を入力してください」-p読みます句読点。あなたが受け入れる唯一のものは数字です:

line_number= 
until [[ $line_number = +([[:digit:]]) && 
     $line_number -ge 1 && 
     $line_number -le $total_line_number ]]; do 
    read -p "Please enter a valid number between 1 and $total_line_number: " line_number 
done 
+0

私はbashスクリプトを習得し、熟練したいと思っています。私はガイドを読むことを試みる、しかし、私はあなたの助けなしにこれを考え出したとは思わない。そしてあなたは謙遜さえしていませんでした。名誉!あなたの時間と専門知識に感謝します! – user8022637

+0

これは 'shopt -s extglob'も必要なのでしょうか? –

+0

'[...]]コマンドを評価している間に、最近のバージョンの' bash'は 'extglob'を一時的にオンにします。 – chepner

関連する問題