Shell Script 里面的指令, 如果没有用条件控制 (例如 if), 不管之前的指令执行结果如何, 每个指令也会逐一执行, 例如:
|
1 2 3 4 5 |
#!/bin/sh cd /path/dir rm -f *.txt |
上面的程式码很简单, 只是用 cd 指令转换到 /path/dir 目录, 然后执行 rm 指令, 将所有 .txt 结尾的档案删除。
但如果执行 cd 指令的时出错, 例如 /path/dir 目录不存在, 或者没有权限进入, 那便会在当前目录删除所有 .txt 副档名的档案。
解决方法十分简单, 只要加上 “set -e” 一行, 那么 Shell Script 执行指令遇到错误时, 便会立即终止执行, 并自动退出离开, 以上面的例子, 可以这样写:
|
1 2 3 4 5 6 |
#!/bin/sh set -e cd /path/dir rm -f *.txt |
当然另一个做法可以用 if 来检查 cd 的执行结果, 写法是这样:
|
1 2 3 4 5 6 7 8 |
#!/bin/sh if cd /path/dir; then rm -f *.txt else echo "Could not change directory!" 1>&2 exit 1 fi |