使用typeset在shell脚本中进行错误处理

时间:2013-07-19 12:27:53

标签: shell unix

我试图通过下面的shell脚本test.sh来捕获排版错误:

Shell脚本

typeset -i int
int=2
echo $int
int=asd || echo "type mismatch"

但我得到的输出为:

输出

./test.sh
2
./test.sh[4]: asd: bad number

必填结果

./test.sh
2
./test.sh[4]: asd: bad number
**type mismatch**

我正在使用以下机器:

bash --version
GNU bash, version 3.2.51(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.

请建议我在脚本中进行更改。 我需要一种方法来确保输入参数是INT。我必须使用排版和异常处理。

1 个答案:

答案 0 :(得分:1)

尝试使用eval:

typeset -i int   # Using the name "int" just seems like asking for trouble!
eval int="$1" || echo "type mismatch" >&2

问题在于,在行int=asd || ...中,第一个简单命令将始终按照标准的要求求值为true,因为没有给出命令。变量赋值发生在当前shell中,但没有给出命令,结果如 2.9.1 部分所述:

如果有命令名,则执行将继续执行命令搜索和执行中所述。如果没有命令名,但命令包含命令替换,则命令应以完成的最后一个命令替换的退出状态完成。否则,命令应以零退出状态完成。