這是一個(gè)系列文章,主要分享shell(部分功能僅適用于bash)的使用建議和技巧,每次分享3點(diǎn),希望你能有所收獲。
1 &&的作用
$ touch test.log
$ cat test.log && echo ok
ok
$ rm test.log
$ cat test.log && echo ok
cat: test.log: No such file or directory
如果命令之間使用&&分隔,相當(dāng)于邏輯“與”,此時(shí)只有前一個(gè)命令執(zhí)行成功,后一個(gè)命令才會(huì)執(zhí)行,如果前一個(gè)命令執(zhí)行失敗,后一個(gè)命令就不會(huì)執(zhí)行。由示例中可以看到,當(dāng)test.log文件存在時(shí),會(huì)正常打印ok,但是刪除test.log文件后,cat test.log執(zhí)行失敗,不會(huì)執(zhí)行第二條命令,所以不打印ok。
2 ||的作用
$ touch test.log
$ cat test.log || echo ok
$ rm test.log
$ cat test.log || echo ok
cat: test.log: No such file or directory
ok
如果命令之間使用||分隔,相當(dāng)于邏輯“或”,此時(shí)只有前一個(gè)命令執(zhí)行失敗,后一個(gè)命令才會(huì)執(zhí)行,如果前一個(gè)命令執(zhí)行成功,后一個(gè)命令就不會(huì)執(zhí)行。由示例中可以看到,當(dāng)test.log文件存在時(shí),不會(huì)打印ok,但是刪除test.log文件后,cat test.log執(zhí)行失敗,此時(shí)會(huì)執(zhí)行第二條命令,所以打印ok,行為和&&相反。
3 分號(hào)的作用
$ touch test.log
$ cat test.log;echo ok
ok
$ rm test.log
$ cat test.log;echo ok
cat: test.log: No such file or directory
ok
如果命令之間使用分號(hào)分隔,那么命令會(huì)依次執(zhí)行,不管分號(hào)前的命令是否執(zhí)行成功,后續(xù)命令都會(huì)執(zhí)行。由示例中可以看到,就算將test.log文件刪除,也會(huì)正常打印ok。
綜上,三種符號(hào)的作用總結(jié)如下:
- cmdA && cmdB:只有cmdA執(zhí)行成功,才會(huì)執(zhí)行cmdB
- cmdA || cmdB:只有cmdA執(zhí)行失敗,才會(huì)執(zhí)行cmdB
- cmdA ; cmdB:不管cmdA是否執(zhí)行成功,都會(huì)執(zhí)行cmdB