这是我在这个网站上的第一个问题,所以如果它很差,我很抱歉,我会接受你的建议来改进我未来的问题。
背景:我的脚本应该接受一个传入的参数,比如-rows,财政,-r,它不应该接受大写字母的变化,其中任何一个。如果找到一个大写变化,它应该退出。如果除了-r或-c之外,它还应该退出(我认为第一个语句是多余的,因为-r和-R在ascii表上由32隔开)。不仅脚本应该退出,而且应该删除以前创建的临时文件。我现在离得太远了,因为我想说的很贴切。
我有一个陷阱,设置为强制删除临时文件,状态为1退出,状态为1和15触发。
这是一个陷阱:
trap "rm -f $tempFile; exit 1" 1 2 15
以下是应该捕获-a的条件语句-anyLetters但是-r&&c
if [ "${1:0:2}" != '-r' ] && [ "${1:0:2}" != '-c' ]
then
echo "Usage: stats {-rows|-cols} [file]" >&2
exit 1
fi
如果我输入命令以-r的形式从命令提示符调用脚本,脚本将按其应有的方式运行,并且在整个脚本中需要时陷阱也会工作。它移除了诱饵文件和所有东西。
但是,如果我用-R或-C调用脚本,它就会以使用错误的形式退出,但是陷阱不会删除这个tempfile。为什么?我有什么不明白的吗?电脑看到了什么?
请告诉我你还想看什么。我很感激你的帮助!
发布于 2015-10-16 20:07:27
您正在捕获信号1、2和15。在我的机器(x86 Linux)上,这些信号对应于SIGHUP、SIGINT和SIGTERM。
但是您的if
语句没有发送任何这些信号;它只是退出。我不知道你为什么要这样做会产生信号。
https://stackoverflow.com/questions/33178309
复制相似问题