Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用排版编写shell脚本时的错误处理_Shell_Unix - Fatal编程技术网

使用排版编写shell脚本时的错误处理

使用排版编写shell脚本时的错误处理,shell,unix,Shell,Unix,我试图通过下面的shell脚本test.sh捕获排版错误: Shell脚本 但我得到的结果是: 输出 要求的结果 我正在使用以下机器: bash --version GNU bash, version 3.2.51(1)-release (sparc-sun-solaris2.10) Copyright (C) 2007 Free Software Foundation, Inc. 请建议我在脚本中需要做的更改。 我需要一种方法来确保输入参数是INT。我必须使用typeset和异常处理。尝试使

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

Shell脚本 但我得到的结果是:

输出 要求的结果 我正在使用以下机器:

bash --version
GNU bash, version 3.2.51(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.
请建议我在脚本中需要做的更改。 我需要一种方法来确保输入参数是INT。我必须使用typeset和异常处理。

尝试使用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中进行,但未给出任何命令,结果如第节所述:


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

您使用的是哪个shell?@glennjackman这是个问题。sparc-sun-solaris2.10上的Bash 3.2.51(1)。
./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.
typeset -i int   # Using the name "int" just seems like asking for trouble!
eval int="$1" || echo "type mismatch" >&2