在shell中,我们经常会同时执行多条命令,多条命令之间通常有以下四种分隔符:
; (封号)
&&
|| (或)
| (管道)
便于实验,创建以下两个文件
#cat a.txt
测试文件1
测试文件2
#cat test.py
print("Hello Python3")
1.用 ;(封号) 分隔的多条命令
说明:所有命令都会执行,相当于每条命令独立执行,互不影响。实验:
# cat a.txt;python3 test.py
测试文件1
测试文件2
Hello Python3
# cat b.txt;python3 test.py
cat: b.txt: 没有那个文件或目录
Hello Python3
结论:无论第一条命令执行成功或失败,第二条命令始终执行。
2.用 && 分隔的多条命令
说明:各命令顺序执行,当前一条命令执行成功,才会执行后面的命令。实验:
# cat a.txt && python3 test.py
测试文件1
测试文件2
Hello Python3
# cat b.txt && python3 test.py
cat: b.txt: 没有那个文件或目录
结论:只有当第一条命令执行成功后,才执行第二条命令,否则后面的命令不执行。
3.用 ||(或) 分隔的多条命令
说明:只有当前一条命令执行失败时,才执行下一条命令,直到命令成功执行;也就是说按命令顺序,只执行第一条执行成功的命令。实验:
cat a.txt || python3 test.py
测试文件1
测试文件2
# cat b.txt || python3 test.py
cat: b.txt: 没有那个文件或目录
Hello Python3
# cat b.txt || python3 test.py || cat a.txt
cat: b.txt: 没有那个文件或目录
Hello Python3
# cat b.txt || python3 test1.py || cat a.txt
cat: b.txt: 没有那个文件或目录
python3: can't open file 'test1.py': [Errno 2] No such file or directory
测试文件1
测试文件2
结论:成功执行一条命令后就停止。
4.用 |(管道) 分隔的多条命令
说明:管道可以将前一个命令的输出作为后一个命令的输入,从而让两个(或更多)命令像流水线一样连续工作,不断地处理文本流。执行完成后,输出最后一个命令的结果。实验:
cat a.txt | python3 test.py
Hello Python3
# cat a.txt | wc -l
2
结论:管道把第一条命令的输出,作为第二个命令的输入,最终只输出最后命令的结果;即使第二条命令没有接收第一条命令的输出,第一条命令的结果也不会输出。
以上为shell下同时执行多条命令的常见用法总结,本节完。