这是我在这个网站上的第一个问题,所以如果情况不好我会道歉,我会采取你的建议来改善我未来的问题。
背景: 我的脚本假设采用传入的参数,例如-rows || -r || -columns || -c但它不应接受任何这些中的任何一个的资本主导字母变体。如果发现资本变化,它应该退出。如果它找到除-r或-c之外的任何东西它也应该退出(我想第一个语句是多余的,因为-r和-R在ascii表上用32分隔)。脚本不仅应该退出,而且应该删除先前创建的临时文件。我现在正在离开很多地方,因为我正努力做到这一点。
我有一个设置为强制删除临时文件的陷阱,退出状态为1,并以状态1 2和15触发。
这是陷阱:
trap "rm -f $tempFile; exit 1" 1 2 15
这是应该捕获的条件语句-a,-anyLettersBut-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调用脚本,它将以Usage错误退出,但陷阱不会删除临时文件。为什么?我需要什么,我不明白?电脑看到了什么?
请告诉我您还想看到什么。我感谢您的帮助!
答案 0 :(得分:1)
您正在捕获信号1,2和15.在我的计算机(x86 Linux)上,这些对应于SIGHUP,SIGINT和SIGTERM。
但是你的if
语句没有发出这些信号;它只是退出。我不确定你为什么会产生信号。