常用shell指令_指令操作符相关


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`

评论
  目录