以下bash脚本接受0到100之间的任何数字输入,并打印出屏幕上的平均数字。该脚本还具有输入验证,除了0-100和q或Q之间的数字外,不允许任何其他内容。输入q或Q后,它会计算结果并输出到屏幕。输入验证还会检查以确保没有输入空值,输入特殊字符以及没有输入数字/字母组合,特殊字符/数字组合等。
我遇到的唯一问题是反斜杠字符。反斜杠在此脚本中被转义,当我运行脚本并输入反斜杠时,它会暂停并要求您按返回以继续脚本。似乎脚本仍然有效,但我很好奇为什么它会暂停。我在这个网站上看到的大部分建议都是为了逃避反斜杠的反斜杠,但这不起作用。
#! /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