Bash基本脚本提供了超现实的错误

时间:2011-10-18 13:51:40

标签: bash scripting

这次在实验室的练习让我疯了! 虽然这似乎是一项非常简单的任务,但我得到了错误,我真的不知道它们来自哪里。

简单运动:

  • 使用BASH脚本,读取输入,检查它是否只是一系列数字,并打印出与其连接的内容。

要进行数字匹配,我使用简单的正则表达式。代码应该是这样的:

#!/bin/bash

echo "amount: "
read AMOUNT
REGEX="^[0-9]*$"
if [[ $AMOUNT =~ $REGEX ]]
then
    echo "amount (in $US) = "$AMOUNT
else
    echo "invalid amount, or input is not a number, quitting"
fi

但无论我如何看待它,它都会发出错误:"amount.sh: 11: [[: not found" 甚至教授也很惊讶。

我做错了什么?

(使用BASH shell v4.1.5,使用Ubuntu 10.04。)

2 个答案:

答案 0 :(得分:4)

一般改进:

#!/bin/bash

echo "amount: "
read AMOUNT
REGEX='^[0-9]+$'
if [[ "$AMOUNT" =~ $REGEX ]]
then
    echo "amount (in \$US) = $AMOUNT"
else
    echo "invalid amount, or input is not a number, quitting"
fi

许多小引用问题窗口已关闭。我假设您需要输入(AMOUNT中没有字符会出错)。

答案 1 :(得分:3)

我无法在bash 3.2.39(Ubuntu 8.04.01)上重现这一点。您使用$US时遇到错误,但[[看起来没问题。我还测试了bash 4.1.10(OpenSUSE 11)。

您似乎没有向我们提供您的整个脚本。它抱怨第11行,但你的脚本在第6行有[[

荒谬......确保你的[确实是方括号字符,而不是看起来像方括号的奇怪的Unicode字符。你可能会重新输入整个脚本,因为它有多短(或者像我一样将其剪切并粘贴到这个问题上)。

请确保您不会在某些行上意外地使用Windows换行符(\ r \ n)。这有时会产生这样的问题(虽然我不认为这是这个问题)。

为了好玩,请切换到单个[而不是[[[实际上是一个可执行文件(/usr/bin/[)。它可能无法处理=~运算符,但您会看到行为是否发生了变化。