成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Shell腳本中多命令邏輯的執(zhí)行順序是什么-創(chuàng)新互聯(lián)

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

府谷ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

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

command1 ; command2

命令之間沒有邏輯關(guān)系。分號(hào)連接的命令會(huì)按照順序從前向后依次執(zhí)行,但分號(hào)兩端的命令之間沒有任何邏輯關(guān)系,所有寫出來的命令最終都會(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中,通過預(yù)定義變量“$?”來判斷命令是否正確執(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ù)語義判斷?!叭绻?..就...否則...就...”的語句使用“cmd1 && cmd2 || cmd3”,“如果不...就...否則...就...”使用“!cmd1 && cmd2 || cmd3”。

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

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

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

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

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

[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)境讓用戶可以繼續(xù)和bash交互。如果&符號(hào)連接了兩個(gè)命令,則其前面的命令被放入后臺(tái),立即執(zhí)行后面的命令,所以可以簡(jiǎn)單地認(rèn)為這兩個(gè)命令是并行執(zhí)行的,兩端的命令之間也沒有任何邏輯關(guān)系。

需要注意的一點(diǎn)是,在終端的bash環(huán)境下,子shell中的后臺(tái)的進(jìn)程不受終端控制,在終端被關(guān)閉時(shí)它會(huì)掛靠在init/systemd進(jìn)程下,因此退出終端或腳本shell環(huán)境,無法中斷這些后臺(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í)需要依賴于前一個(gè)命令是否執(zhí)行成功。例如,假設(shè)你希望將一個(gè)目錄中的文件全部拷貝到另外一個(gè)目錄中后,然后刪除源目錄中的全部文件。在刪除之前,你希望能夠確信拷貝成功,否則就有可能丟失文件

在本文中,我們將討論:

命令執(zhí)行控制。

命令組合。

&&的使用:

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

      使用語法:

 命令1&&命令2

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

condition1 && condition2

只有當(dāng)condition1為True,才會(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í)行||后面的命令

    使用語法:

命令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í)行一組命令,可以用命令分隔符隔開每一個(gè)命令,并把所有的命令 用圓括號(hào)()括起來。

語法:

(命令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)
#所以,使用()來組合命令,是一種不錯(cuò)的選擇

以上就是Shell腳本中多命令邏輯的執(zhí)行順序是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:Shell腳本中多命令邏輯的執(zhí)行順序是什么-創(chuàng)新互聯(lián)
鏈接分享:http://jinyejixie.com/article12/ccjjdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站網(wǎng)站制作標(biāo)簽優(yōu)化、營(yíng)銷型網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
镇原县| 会东县| 筠连县| 邵武市| 钟祥市| 石首市| 新巴尔虎右旗| 景宁| 山东| 抚宁县| 临安市| 承德县| 五台县| 波密县| 灵璧县| 湾仔区| 鲁山县| 万全县| 开阳县| 页游| 称多县| 苍南县| 夹江县| 高清| 山东省| 奇台县| 桐乡市| 襄城县| 泸定县| 神池县| 珲春市| 合山市| 邵阳市| 湟中县| 安泽县| 青海省| 蒙山县| 奉贤区| 长岭县| 巴彦淖尔市| 吉木萨尔县|