在命令执行失败后退出:
1 | cmd || exit 1 |
子shell(把命令由括号括起来):
1 | cmd | (cmd1; cmd2; cmd3) | cmd4 |
子shell中的cmd1
可以改变工作目录,而不影响外部的cmd4
捕获键盘中断:
1 | trap control_c SIGINT |
获得当前执行脚本的目录($0
就是当前执行脚本):
1 | $(dirname $0) |
if测试:
1 | if [ ! -d $A_DIR ]; then |
for循环:
1 | for f in *; do |
xargs
1 | ls *.old | xargs -n1 -I{} echo mv {} {}.new |
-n N
,将输入参数规整成一行N个的形式(原先的输入参数由' '
或\n
分隔,每行个数可能不一样)-I {}
:由-I
指定的字符串{}
在每一次执行中都会被替换相应的输入参数
1 | find . -type f -name "*.txt" -print0 | xargs -0 rm -f |
find -print0
指定输出的文件名以\0
结尾xargs -0
指定\0
作为参数分隔符,而不是默认的' '
或\n
只要把find
的输出作为xargs
的输入,就必须加-print0
和-0
参数,确保以\0
来分隔输出。否则,文件名中包含的空格' '
会被xargs
会误以为是分隔符。
1 | cat args.txt | ( while read arg; do cat $arg; done) |
为对同一个参数执行多条命令,使用while循环,将cat $arg
换成任意数量的命令