1. &(后台运行符)
把对应指令放在后台运行
2. |(管道符号)
连接两条指令,将前一个指令的输出当成下一个指令的输入,通常用于进程间的通信。
3. $
获取变量参数
3.1. 常用例子:
$0:目前使用的Shell的名称,例如bash shell就会显示bash
$?:是上一指令的返回值,成功是0,不成功是1。一般来说,UNIX(linux) 系统的进程以执行系统调用exit() 来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。一般指令程序倘若执行成功,其回传值为 0;失败为 1。
$*:所有脚本参数的内容:就是调用调用本bash shell的参数。
$@:基本上与上面相同。只不过是“$*”返回的是一个字符串,字符串中存在多外空格。 “$@”返回多个字符串。
$#:返回所有脚本参数的个数。
$$ :Shell本身的PID(ProcessID),即当前进程的PID。
$! :Shell最后运行的后台Process的PID
$- :使用Set命令设定的Flag一览
4. && 和 ||
连接两条指令,常在需要逻辑判断的情景下使用
4.1. 常用例子:
command1 && command2 # command1 失败,跳过 command2
command1 || command2 # command1 成功,跳过 command2
5.
生成序列
5.1. 常用例子:
5.1.1. 生成序列
touch xxx_{00..10..2}.txt # 生成间隔为2的序列文件
mkdir {xxx,yyy,zzz} # 创建xxx、yyy、zzz文件夹
6. <>
改变输入输出流
6.1. 常用例子:
6.1.1. 文件写入
ls > xxx.txt # 覆盖
ls >> xxx.txt # 追加
6.1.2. 指令“欺骗”
grep 'aaa' <(echo aaa) # 因为grep输入参数是文件的路径,这里欺骗了grep指令,让他误以为我们输入了一个文件路径,这里效果上和 `echo aaa | grep 'aaa'` 一样,当然这个例子中因为只需要输入字符串,还有一种更简洁的方式 `grep 'aaa' <<< aaa`
7. xargs
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 默认的命令是 echo,通过 xargs 的处理,换行和空白将被空格取代,可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
很多命令不支持|管道来传递参数(ls
, tar
, rm
, wget
等),xargs 能够将其他命令的输出,然后传递给该命令。
7.1. 参数说明:
- -a file 从文件中读入作为sdtin
- -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
- -p 当每次执行一个argument的时候询问一次用户。
- -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
- -t 表示先打印命令,然后再执行。
- -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
- -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
- -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
- -L num 从标准输入一次读取 num 行送给 command 命令。
- -l 同 -L。
- -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
- -x exit的意思,主要是配合-s使用。
7.2. 常用例子:
7.2.1. 输出格式转换
cat xxx.txt | xargs # 多行变单行输出
cat xxx.txt | xargs -n3 # 每行3个输出
cat xxx.txt | xargs -d ',' # 以逗号作为分隔符输出,a,a,a -> a a a
7.2.2. 参数传输(一般与 '|' 连用)
find . -name '*.txt' -type f -print | xargs tar -czvf txt.tar.gz # 压缩所有txt文件
cat url-list.txt | xargs wget -c # 批量下载
ls *.txt | xargs -n1 -I {} cp {} xxx # 把目录下所有的txt文件复制到xxx文件夹下
8. eval
把变量值作为系统指令
其原理是扫描两次指令,第一次把变量替换为对应的值,第二次,把这个值当成指令的一部分来执行指令。
8.1. 常用例子
pipe = '|'
eval ls %pipe wc -l # 等价于 `ls | wc -l`