亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell腳本中多命令邏輯的執行順序是什么

發布時間:2021-05-18 16:34:45 來源:億速云 閱讀:332 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關Shell腳本中多命令邏輯的執行順序是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1.分號";"

command1 ; command2

命令之間沒有邏輯關系。分號連接的命令會按照順序從前向后依次執行,但分號兩端的命令之間沒有任何邏輯關系,所有寫出來的命令最終都會被執行,即使分號前面的命令出錯也不影響后面的命令。

[root@xuexi ~]# ls das;echo "hdakl"
ls: cannot access das: No such file or directory

hdakl

2.&&

command1  &&  command2

邏輯與。&&連接的命令會按照順序從前向后執行,但只有當command1正確執行才執行command2,如果command1不正確執行,則不執行command2。在bash中,通過預定義變量“$?”來判斷命令是否正確執行,如果"$?"的值為0則表示前一條命令正確執行,其他任意值都表示不正確執行。\

[root@xuexi ~]# echo "hdakl" && ls ds 
hdakl
ls: cannot access ds: No such file or directory
[root@xuexi ~]# ls das && echo "hdakl"
ls: cannot access das: No such file or directory

3.||

command1 || command2

邏輯或。||連接的命令會按照順序從前向后執行,但只有當command1不正確執行才執行command2,command1正確執行則不會執行command2。||和&&都是短路符號,符號左右的命令之間具有邏輯關系。

[root@xuexi ~]# ls das || echo "hdakl" 
ls: cannot access das: No such file or directory
hdakl
[root@xuexi ~]# echo "hdakl" || ls ds  
hdakl

一般要聯合使用&&和||的時候,基本上都會先邏輯與再邏輯或:command1 && command2 || command3。因為在實際中,command2和command3應該都是想要執行的命令。如果command1正確執行,$?就等于0,執行command2,再看情況執行command3,如果command1錯誤執行,$?就不等于0,所以不執行command2,根據$?為非0值,判斷了 || 右邊的命令應該被執行。

通俗點的理解方法是根據語義判斷。“如果...就...否則...就...”的語句使用“cmd1 && cmd2 || cmd3”,“如果不...就...否則...就...”使用“!cmd1 && cmd2 || cmd3”。

例如,如果用戶user1存在,就顯示用戶已經存在,否則,就添加此用戶。

[root@xuexi tmp]# id user1 && echo "user1 exists" || useradd user1

如果用戶user2不存在,則添加此用戶,否則顯示用戶已存在。

[root@xuexi tmp]# !id user2 && useradd user2 || echo "user2 exists"

如果用戶user3不存在,則添加此用戶,并設定其密碼為用戶名本身,否則顯示用戶已存在。

[root@xuexi tmp]# !id user3 && useradd user3 && echo "user3" | passwd --stdin user3 || echo "user3 exists"

4.&

command1 &
command1 & command2

&表示將其前面的命令放入后臺執行,放入后臺后會立即返回到bash環境讓用戶可以繼續和bash交互。如果&符號連接了兩個命令,則其前面的命令被放入后臺,立即執行后面的命令,所以可以簡單地認為這兩個命令是并行執行的,兩端的命令之間也沒有任何邏輯關系。

需要注意的一點是,在終端的bash環境下,子shell中的后臺的進程不受終端控制,在終端被關閉時它會掛靠在init/systemd進程下,因此退出終端或腳本shell環境,無法中斷這些后臺進程。例如:

[root@xuexi ~]# (sleep 10 &)   # 終端1上執行,立即關閉該終端

[root@xuexi ~]# ps aux | grep slee[p]   # 終端2上捕捉sleep進程
root 5732 0.0 0.0 107892 624 ? S 00:28 0:00 sleep 10

注意ps結果中的"?",它表示非終端進程,即脫離了終端。

知識點補充:Shell  命令執行順序

在執行某個命令的時候,有時需要依賴于前一個命令是否執行成功。例如,假設你希望將一個目錄中的文件全部拷貝到另外一個目錄中后,然后刪除源目錄中的全部文件。在刪除之前,你希望能夠確信拷貝成功,否則就有可能丟失文件

在本文中,我們將討論:

命令執行控制。

命令組合。

&&的使用:

   &&就可以解決上面背景說的問題。前面指令執行成功才執行后面的指令。

       使用語法:

 命令1&&命令2

       相當于邏輯與操作:

condition1 && condition2

只有當condition1為True,才會判斷得出condition2 

示例:

要求:拷貝 /tmp/nginx.conf 到 /etc/nginx/nginx.conf 后把/tmp/nginx.conf刪除

cp /tmp/nginx.conf /etc/nginx/nginx.conf&&rm -rf /tmp/nginx.conf

||的使用:

    ||的意思是,當||前面的命令執行成功就不執行||后面的命令

    使用語法:

命令1||命令2

邏輯或的思維。

示例:

要求:拷貝 /tmp/nginx.conf 到 /etc/nginx/nginx.conf 否則把/tmp/nginx.conf 拷貝到 /usr/nginx/nginx.conf

cp /tmp/nginx.conf /etc/nginx/nginx.conf||cp /tmp/nginx.conf /usr/nginx/nginx.conf
為了在當前s h e l l中執行一組命令,可以用命令分隔符隔開每一個命令,并把所有的命令 用圓括號()括起來。

語法:

(命令1;命令2;. . .)

示例:當失敗了,發郵件給自己然后退出

[root@localhost shell_protest]# cat co.sh
#!/bin/bash

false||echo "it is fail"|mail nick&&exit
#特例:當失敗了,發郵件也失敗了,就退出不了程序了
false||echo "it is fail"|mail nick||exit
#特例:當失敗了,發郵件也成功了,但退出不了程序了
false||(echo "it is fail"|mail nick;exit)
#所以,使用()來組合命令,是一種不錯的選擇

以上就是Shell腳本中多命令邏輯的執行順序是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陆川县| 南郑县| 汨罗市| 剑河县| 嘉黎县| 来宾市| 永顺县| 平利县| 栾城县| 陇西县| 嘉黎县| 磐安县| 德阳市| 瓮安县| 郧西县| 许昌县| 郴州市| 当阳市| 高唐县| 来安县| 泗洪县| 宣恩县| 临湘市| 宁德市| 巴彦淖尔市| 苗栗市| 平原县| 康保县| 安多县| 自治县| 繁峙县| 玉溪市| 怀柔区| 高青县| 汝阳县| 邯郸县| 文安县| 镇江市| 商城县| 大理市| 太白县|