先說明一下:
如果第一個命令執行成功,與操作符 (&&)才會執行第二個命令
如果第一個命令執行失敗,或操作符 (||)才會執行第二個命令
可以分析一下下面的命令的輸出:
#!/bin/shecho "1" && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && echo "7" && echo "8" || echo "9"
下面是輸出:
pengdl@debian:~/test/shell$ ./sh5.sh 12478
分析:
echo "1" 執行成功,所以執行echo "2"
echo "2" 執行成功,不執行 echo "3"
既然沒有執行echo "3",可以看做不存在 “ " || echo "3" ”,echo "2"后緊接“ && echo "4" ”
echo "4" 執行成功,不執行echo "5"
既然沒有執行echo "5",可以看做不存在 “ " || echo "5" ”,echo "4"后緊接“ || echo "6" ”
echo "4" 執行成功,不執行echo "6"
既然沒有執行echo "6",可以看做不存在 “ " || echo "6" ”,echo "4"后緊接“ && echo "7" ”
echo "7" 執行成功,執行echo "8"
echo "8" 執行成功,不執行echo "9"
所以最終變成了:
echo "1" && echo "2" && echo "4" && echo "7" && echo "8"
改變一下,比如當前目錄沒存在目錄p,不存在文件7
#!/bin/shcd p && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && ls "7" && echo "8" || echo "9"
下面是輸出:
pengdl@debian:~/test/shell$ ./sh6.sh ./sh6.sh: line 4: cd: p: No such file or directory34ls: cannot access 7: No such file or directory9
如果想改變執行邏輯,可以加優先操作符()
(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)
在上面的偽代碼中,如果Command_x1執行失敗,Command_x2不會執行,但是Command_x3會繼續執行,Command_x4會依賴于Command_x3的退出狀態。
(Command_x1 &&Command_x2)
它的執行成功與否: 如果Command_x1執行成功,執行Command_x2 ,如果Command_x2執行成功,那么整個()執行成功,如果Command_x2執行失敗,整個()執行失敗。如果Command_x2不執行,整個()的執行成功與否取決于Command_x1。
可以分析一下下面的例子:
例一
#!/bin/shcd p && (echo "1" || echo "2") || (echo "3" && echo "5") && (ls 7 || echo "8" || (echo "9" && echo "0"))
下面是輸出:
./sh8.sh: line 3: cd: p: No such file or directory35ls: cannot access 7: No such file or directory8
例二
#!/bin/shcd p && (echo "1" || echo "2") || (echo "3" && cd p) && (ls 7 || echo "8" || (echo "9" && echo "0"))
下面是輸出:
./sh7.sh: line 3: cd: p: No such file or directory3./sh7.sh: line 3: cd: p: No such file or directory
例三:
#!/bin/bashif ls ./iii then echo "1"elif echo "2" && ls ./ithen echo "3"else echo "4"fi
下面是輸出:
pengdl@debian:~/test/shell$ ./sh8.sh ls: cannot access ./iii: No such file or directory2ls: cannot access ./i: No such file or directory4
新聞熱點
疑難解答