最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本中多命令邏輯執(zhí)行順序的方法詳解

 更新時(shí)間:2020年03月02日 08:28:07   作者:駿馬金龍  
Linux中可以使用分號(hào)“;”、雙and號(hào)“&&”和雙豎線“||”來(lái)連接多個(gè)命令,這篇文章主要介紹了Shell腳本中多命令邏輯執(zhí)行順序的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友參考下

Linux中可以使用分號(hào)“;”、雙and號(hào)“&&”和雙豎線“||”來(lái)連接多個(gè)命令。單"&"符號(hào)也算命令連接符號(hào),只不過(guò)它是將其前面的命令放入后臺(tái)執(zhí)行,所以可以變相地實(shí)現(xiàn)命令并行執(zhí)行。

1.分號(hào)";"

command1 ; command2

命令之間沒(méi)有邏輯關(guān)系。分號(hào)連接的命令會(huì)按照順序從前向后依次執(zhí)行,但分號(hào)兩端的命令之間沒(méi)有任何邏輯關(guān)系,所有寫(xiě)出來(lái)的命令最終都會(huì)被執(zhí)行,即使分號(hào)前面的命令出錯(cuò)也不影響后面的命令。

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

hdakl

2.&&

command1  &&  command2

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

[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

邏輯或。||連接的命令會(huì)按照順序從前向后執(zhí)行,但只有當(dāng)command1不正確執(zhí)行才執(zhí)行command2,command1正確執(zhí)行則不會(huì)執(zhí)行command2。||和&&都是短路符號(hào),符號(hào)左右的命令之間具有邏輯關(guān)系。

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

一般要聯(lián)合使用&&和||的時(shí)候,基本上都會(huì)先邏輯與再邏輯或:command1 && command2 || command3。因?yàn)樵趯?shí)際中,command2和command3應(yīng)該都是想要執(zhí)行的命令。如果command1正確執(zhí)行,$?就等于0,執(zhí)行command2,再看情況執(zhí)行command3,如果command1錯(cuò)誤執(zhí)行,$?就不等于0,所以不執(zhí)行command2,根據(jù)$?為非0值,判斷了 || 右邊的命令應(yīng)該被執(zhí)行。

通俗點(diǎn)的理解方法是根據(jù)語(yǔ)義判斷。“如果...就...否則...就...”的語(yǔ)句使用“cmd1 && cmd2 || cmd3”,“如果不...就...否則...就...”使用“!cmd1 && cmd2 || cmd3”。

例如,如果用戶(hù)user1存在,就顯示用戶(hù)已經(jīng)存在,否則,就添加此用戶(hù)。

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

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

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

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

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

4.&

command1 &
command1 & command2

&表示將其前面的命令放入后臺(tái)執(zhí)行,放入后臺(tái)后會(huì)立即返回到bash環(huán)境讓用戶(hù)可以繼續(xù)和bash交互。如果&符號(hào)連接了兩個(gè)命令,則其前面的命令被放入后臺(tái),立即執(zhí)行后面的命令,所以可以簡(jiǎn)單地認(rèn)為這兩個(gè)命令是并行執(zhí)行的,兩端的命令之間也沒(méi)有任何邏輯關(guān)系。

需要注意的一點(diǎn)是,在終端的bash環(huán)境下,子shell中的后臺(tái)的進(jìn)程不受終端控制,在終端被關(guān)閉時(shí)它會(huì)掛靠在init/systemd進(jìn)程下,因此退出終端或腳本shell環(huán)境,無(wú)法中斷這些后臺(tái)進(jìn)程。例如:

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

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

注意ps結(jié)果中的"?",它表示非終端進(jìn)程,即脫離了終端。

知識(shí)點(diǎn)補(bǔ)充:Shell  命令執(zhí)行順序

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

在本文中,我們將討論:

命令執(zhí)行控制。

命令組合。

&&的使用:

   &&就可以解決上面背景說(shuō)的問(wèn)題。前面指令執(zhí)行成功才執(zhí)行后面的指令。

       使用語(yǔ)法:

 命令1&&命令2

       相當(dāng)于邏輯與操作:

condition1 && condition2

只有當(dāng)condition1為T(mén)rue,才會(huì)判斷得出condition2 

示例:

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

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

||的使用:

    ||的意思是,當(dāng)||前面的命令執(zhí)行成功就不執(zhí)行||后面的命令

    使用語(yǔ)法:

命令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
為了在當(dāng)前s h e l l中執(zhí)行一組命令,可以用命令分隔符隔開(kāi)每一個(gè)命令,并把所有的命令 用圓括號(hào)()括起來(lái)。

語(yǔ)法:

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

示例:當(dāng)失敗了,發(fā)郵件給自己然后退出

[root@localhost shell_protest]# cat co.sh
#!/bin/bash
​
false||echo "it is fail"|mail nick&&exit
#特例:當(dāng)失敗了,發(fā)郵件也失敗了,就退出不了程序了
false||echo "it is fail"|mail nick||exit
#特例:當(dāng)失敗了,發(fā)郵件也成功了,但退出不了程序了
false||(echo "it is fail"|mail nick;exit)
#所以,使用()來(lái)組合命令,是一種不錯(cuò)的選擇

總結(jié):

在編寫(xiě)shell腳本時(shí),使用&&和||對(duì)構(gòu)造判斷語(yǔ)句非常有用。如果希望在前一個(gè)命令執(zhí)行失敗的情況不執(zhí)行后面的命令,那么本文所講述的方法非常簡(jiǎn)單有效。使用這樣的方法,可以根據(jù)&&或||前面命令的返回值來(lái)控制其后面命令的執(zhí)行。

到此這篇關(guān)于Shell腳本中多命令邏輯執(zhí)行順序的方法詳解的文章就介紹到這了,更多相關(guān)shell腳本多命令執(zhí)行順序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shell腳本編程之循環(huán)語(yǔ)句學(xué)習(xí)筆記

    shell腳本編程之循環(huán)語(yǔ)句學(xué)習(xí)筆記

    這篇文章主要介紹了shell腳本編程之循環(huán)語(yǔ)句學(xué)習(xí)筆記,本文內(nèi)容較簡(jiǎn)單,可以作為shell循環(huán)語(yǔ)句的備忘錄,忘記怎么寫(xiě)時(shí)來(lái)看看吧~需要的朋友可以參考下
    2014-09-09
  • Shell腳本if else語(yǔ)句小結(jié)

    Shell腳本if else語(yǔ)句小結(jié)

    這篇文章主要介紹了Shell腳本if else語(yǔ)句小結(jié),總結(jié)了Shell腳本中的if控制語(yǔ)句和其它語(yǔ)言的不同,常見(jiàn)的3種寫(xiě)法等,需要的朋友可以參考下
    2014-07-07
  • linux文件目錄默認(rèn)權(quán)限(詳解)

    linux文件目錄默認(rèn)權(quán)限(詳解)

    下面小編就為大家?guī)?lái)一篇linux文件目錄默認(rèn)權(quán)限(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 十三個(gè)寫(xiě)好shell腳本的技巧分享

    十三個(gè)寫(xiě)好shell腳本的技巧分享

    這篇文章主要給大家介紹了關(guān)于寫(xiě)好shell腳本的13個(gè)技巧的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • Linux 命令之rsync命令詳解

    Linux 命令之rsync命令詳解

    rsync命令是一個(gè)遠(yuǎn)程數(shù)據(jù)同步工具,可通過(guò)LAN/WAN快速同步多臺(tái)主機(jī)間的文件。下面通過(guò)本文給大家分享Linux 命令之rsync命令詳解,需要的朋友參考下吧
    2017-08-08
  • Linux 中批量提取文件夾下所有目錄及文件名稱(chēng)

    Linux 中批量提取文件夾下所有目錄及文件名稱(chēng)

    這篇文章主要介紹了Linux 中批量提取文件夾下所有目錄及文件名稱(chēng) ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • shell檢測(cè)某個(gè)文件/文件夾是否存在詳細(xì)實(shí)例

    shell檢測(cè)某個(gè)文件/文件夾是否存在詳細(xì)實(shí)例

    shell是一個(gè)用?C?語(yǔ)言編寫(xiě)的程序,它是用戶(hù)使用Linux的橋梁,下面這篇文章主要給大家介紹了關(guān)于shell檢測(cè)某個(gè)文件/文件夾是否存在的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • shell 命令統(tǒng)計(jì)代碼行數(shù)的簡(jiǎn)單代碼

    shell 命令統(tǒng)計(jì)代碼行數(shù)的簡(jiǎn)單代碼

    這篇文章主要介紹了shell 命令統(tǒng)計(jì)代碼行數(shù)的簡(jiǎn)單代碼,文中給大家提到了統(tǒng)計(jì)行數(shù)、字符數(shù)、字節(jié)數(shù)的shell腳本 ,需要的朋友可以參考下
    2018-04-04
  • Shell中正則表達(dá)式及sed和awk常見(jiàn)問(wèn)題

    Shell中正則表達(dá)式及sed和awk常見(jiàn)問(wèn)題

    本文主要介紹了Shell中正則表達(dá)式及sed和awk常見(jiàn)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • shell腳本自動(dòng)輸入用戶(hù)名和密碼的實(shí)現(xiàn)

    shell腳本自動(dòng)輸入用戶(hù)名和密碼的實(shí)現(xiàn)

    本文主要介紹了shell腳本自動(dòng)輸入用戶(hù)名和密碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論

台北市| 麟游县| 连州市| 左贡县| 蒙阴县| 昆明市| 土默特右旗| 荣昌县| 双桥区| 禹城市| 原平市| 正安县| 万安县| 南昌县| 全椒县| 和林格尔县| 和顺县| 景泰县| 梅河口市| 永济市| 广平县| 宁强县| 水富县| 景洪市| 凯里市| 孙吴县| 西乌| 晋江市| 杂多县| 湄潭县| 合肥市| 建阳市| 什邡市| 贵南县| 长宁县| 乐东| 潼南县| 乌苏市| 兴宁市| 九寨沟县| 峨山|