dcLunatic's blog

linux中的命令链接操作符

字数统计: 998阅读时长: 4 min
2018/09/21 Share

Linux中的命令链接操作符

在linux中,我们可以通过一些特殊的操作符,比如说管道“|”,来将几个不同的命令结合起来执行,这些操作符就叫做命令链接操作符。

&

&的作用是让当前命令在后台执行,当我们在执行一些比较耗时的命令时,比如apt-get update,这样子就不会占用当前的终端界面了。

1
root@dcLunatic:~# apt-get update &

使用jobs命令可以查看当前的后台作业运行情况,fg可以将后台中的作业切换到前台运行,bg可以将暂停的作业切换成继续执行。

1
2
3
4
5
6
root@dcLunatic:~# vim &
[1] 3046
root@dcLunatic:~# jobs
[1]+ Stopped vim
root@dcLunatic:~# fg 1
root@dcLunatic:~# bg 1

Ctrl + Z可以将当前正在前台执行的命令放到后台,并且暂停

;

;分号操作符可以让你在一次执行多条命令,每条命令之间只需要通过;连接,命令从左到右依次执行

1
2
3
root@dcLunatic:~/net-learning# date "+%x %X";echo "    John: Hello world!"
08/06/18 19:40:02
John: Hello world!

&&

当多个命令用&&连接时,只有前面的命令成功执行时,才会之后面的命令。

比如说,从网站www.linuxde.net下载东西,首先先检查是否可以连接到该网站

1
root@dcLunatic:~# ping www.linuxde.net && wget http://www.linuxde.net/testfile.zip

在类UNIX里面,0表示无错误,而所有非0返回值都是各种错误

||

||操作符跟&&操作符相反,只有当前面的命令失败时,才会执行后面的命令

举个例子

1
2
3
4
5
test@dcLunactic:/root/$ ls rootFile.txt -l
-rw-r----- 1 root root 201 Jul 31 19:15 rootFile.txt
test@dcLunactic:/root/$: echo "Hello world!" >> rootFile.txt || echo "无法写入该文件"
sh: 13: cannot create rootFile.txt: Permission denied
无法写入文件

!

!跟很多编程语言中的!一样,都是表示非的意思。

举个例子,删除所有非txt文件

1
2
3
4
5
root@dcLunatic:~/Downloads# ls
1.zip 2.html 3.pdf 4.docx 5.txt 6.py 7.cpp 8.class 9.java
root@dcLunatic:~/net-learning/test# rm -f !(*.txt)
root@dcLunatic:~/net-learning/test# ls
5.txt

&&–||

&&--||操作符是一对组合操作符,作用跟编程语言中的if–else一样,当前面的命令成功执行时,执行&&后的命令,否则执行||后的命令

还是上面的例子

1
2
3
4
5
test@dcLunactic:/root/$ ls rootFile.txt -l
-rw-r----- 1 root root 201 Jul 31 19:15 rootFile.txt
test@dcLunactic:/root/$: echo "Hello world!" >> rootFile.txt && echo "写入成功" || echo "无法写入该文件"
sh: 13: cannot create rootFile.txt: Permission denied
无法写入文件

|

管道操作符,当多个命令用|连接时,将前面命令的输出作为后面命令的输入。

举个例子,查看是否有vim进程

1
2
root@dcLunatic:~# ps -e | grep vim
3053 pts/0 00:00:00 vim

{}

合并操作符把,会把在{}中的命令当成是一个整体去执行

比如说,检查一下文件1.java是否存在,如果不存在则创建之并输出提示信息。

1
root@dcLunatic:~# test -f 1.java || {touch 1.java;echo "文件不存在,创建之"}

这里也可以换一种写法

1
root@dcLunatic:~# [-f 1.java] || {touch 1.java;echo "文件不存在,创建之"}

[]

左中括号[和test是等同的。右中括号是关闭条件判断的。

比如判断文件是否存在

1
2
3
root@dcLunatic:~/net-learning# [ -f 123.txt ]
root@dcLunatic:~/net-learning# echo $?
1

()

()可以改变优先级顺序什么的,跟数学中的()一样

比如上面的也可以这么写

1
root@dcLunatic:~# test -f 1.java || (touch 1.java;echo "文件不存在,创建之")

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)这样子的话,如果Command_x1执行失败,Command_x2不会执行,但是Command_x3会继续执行, Command_x4会依赖于 Command_x3的退出状态。

\

连接符\,当一句命令太长需要分行写时,使用 \ 可以换行。

比如重启网络服务

1
2
3
systemctl restart \
networking.service
network-manager.service
CATALOG
  1. 1. Linux中的命令链接操作符
    1. 1.1. &
    2. 1.2. ;
    3. 1.3. &&
    4. 1.4. ||
    5. 1.5. !
    6. 1.6. &&–||
    7. 1.7. |
    8. 1.8. {}
    9. 1.9. []
    10. 1.10. ()
    11. 1.11. \