2

我正在尝试验证用户输入的输入是数字类型还是非数字类型。如果是数字类型,那么它将执行必要的操作,否则它将生成我设计的错误消息(不是生成的标准错误)

我一直在使用的步骤是:

1> 对输入进行数学运算。
echo -n "Enter a number : "; read a

现在如果输入a是数字类型,则操作成功,否则将生成标准错误。

Enter a number : ww

expr: non-numeric argument

我用来重定向标准错误的代码是:

tmp=`expr $a / 1` >&2

我还尝试使用以下代码将其重定向到空文件:

tmp=`expr $a / 1` > /dev/null

但是仍然显示错误。

4

3 回答 3

5

您必须在内部表达式中重定向 stderr:

tmp=`expr $a / 1 2>/dev/null`
于 2013-04-13T09:36:14.107 回答
2

您的两个示例都重定向标准输出,而不是标准错误因为>.

要丢弃 stderr,您需要2> /dev/null,因为它是文件描述符 2。另外有用的是2>&1,将 stderr 合并到 stdout,以及&> file将 stderr 和 stdout 重定向到同一个文件的简写。

这个页面解释得很好:http ://www.tldp.org/LDP/abs/html/io-redirection.html

于 2013-04-13T09:47:16.023 回答
2

正则表达式输入怎么样?

read a
if [[ $a =~ ^[0-9]+$ ]]
then
  echo this is a number
else
  echo not a number
fi
于 2013-04-13T09:37:09.427 回答