【问题标题】:Trying to escape the backslash in this bash script试图在这个 bash 脚本中转义反斜杠
【发布时间】:2016-10-05 06:27:19
【问题描述】:

以下 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."

【问题讨论】:

  • 我还如何让它检查任何字母数字条目并提示他们重新输入?

标签: bash scripting


【解决方案1】:

使用read -r 禁用反斜杠转义,默认启用。

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

【讨论】:

  • 感谢 read -r 修复了反斜杠的问题。现在我在输入任何数字后跟字母 q 时遇到另一个问题,它会破坏脚本。
  • A-p 应该是A-P
  • 换句话说,我如何让这个脚本检查字母数字条目并让用户重新输入正确的数字?
  • 先检查== [qQ],然后检查大if。然后您可以将*[a-pA-pr-zR-Z]* 简化为*[a-zA-Z]*
猜你喜欢
  • 2013-11-10
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多