您好,登錄后才能下訂單哦!
這篇文章主要介紹“Bash中怎么用控制運算符連接命令”,在日常操作中,相信很多人在Bash中怎么用控制運算符連接命令問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Bash中怎么用控制運算符連接命令”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在命令行中,使用控制運算符為復合命令添加邏輯。
經常會使用一些簡單的復合指令,比如說在一個命令行中連接幾個命令。這些命令使用分號分隔,表示一個命令結束。為了在一個命令行中創建一系列簡單的 shell 命令,只需要使用分號把每一條命令分隔開,就像下面這樣:
command1 ; command2 ; command3 ; command4 ;
***一個分號你可以不用添加,因為當你按下回車鍵時就表示一個命令的結束,但是為了和其它的保持一致,還是建議加上比較好。
所有的命令執行都沒有什么問題 —— 只要沒有什么意外發生。但是當出問題時到底發生了什么呢?我們可以預測,并且通過 Bash 中內置的 &&
和 ||
運算符跟蹤這些錯誤。這兩個控制運算符提供了一些流控制,可以讓我們改變代碼執行隊列的順序。分號和換行符也被認為是 Bash 的控制運算符。
&&
運算符意義簡單來說就是“如果 command1
執行成功,就接著執行 command2
。”如果 command1
因為任何原因執行失敗,那么 command2
將不執行。這個語法看下來像這樣:
command1 && command2
這樣寫是允許的,因為每一個命令都會返回一個值(RC)給 shell 來表示這個命令在執行的過程中是否執行成功或者失敗。通常,返回值是 0
表示成功,而一個正數值表示不同種類的錯誤。有一些系統管理工具僅僅返回一個 1
來表示所有的錯誤,但是也有很多工具使用其它的正數的返回值來表示各種類型錯誤。
我們可以很容易的使用腳本來檢查 shell 變量 $?
,可以通過命令列表中的下一個命令,或者可以直接使用系統管理工具檢查。我們一起來看這些返回值。運行一個簡單的命令然后立即檢查它的返回值,這個返回值始終是屬于***一個運行的命令。
[student@studentvm1 ~]$ ll ; echo "RC = $?"total 284-rw-rw-r-- 1 student student 130 Sep 15 16:21 ascii-program.shdrwxrwxr-x 2 student student 4096 Nov 10 11:09 bin<snip>drwxr-xr-x. 2 student student 4096 Aug 18 10:21 VideosRC = 0[student@studentvm1 ~]$
這個返回值是 0
,表示這個命令執行成功了。現在嘗試使用同樣的命令在一些我們沒有權限的目錄上。
[student@studentvm1 ~]$ ll /root ; echo "RC = $?"ls: cannot open directory '/root': Permission deniedRC = 2[student@studentvm1 ~]$
這個返回值的含義可以在 ls 命令的 man 頁面 中找到。
現在我們來試試 &&
這個控制運算符,因為它也可能會被用在一個命令行程序中。我們將從一個簡單的示例開始:創建一個新目錄,如果創建成功就在這個目錄中創建一個文件。
我們需要一個目錄可以創建其它的目錄。首先,在你的家目錄中創建一個臨時的目錄用來做測試。
[student@studentvm1 ~]$ cd ; mkdir testdir
在 ~/testdir
中新建一個目錄,這也應該是一個空目錄,因為是你剛剛創建的,然后創建一個新的空文件在這個新目錄中。下面的命令可以做這些事情。
[student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1[student@studentvm1 ~]$ ll ~/testdir/testdir2/total 0-rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1[student@studentvm1 ~]$
我們看到一切都運行得很好,因為 testdir
目錄是訪問且可寫的。然后我們改變 testdir
目錄的權限,讓用戶 student
不再具有訪問的權限。操作如下:
[student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdird---rwxrw-. 3 student student 4096 Nov 12 14:13 testdir[student@studentvm1 ~]$
在長列表(ll
)命令后面使用 grep
命令來列出 testdir
目錄。你可以看到用戶 student
不再有 testdir
目錄的訪問權限。現在我們像之前一樣運行同樣的命令,但是在 testdir
目錄中創建的是一個不同的目錄。
[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied[student@studentvm1 ~]$
盡管我們也同樣得到了一個錯誤的消息,但 &&
控制運算符阻止了 touch
命令的運行,因為在創建 testdir3
目錄的時候發生了錯誤。通過這種復合的流控制可以阻止一些錯誤的發生使事情變亂。但是這樣看起來變得稍微復雜了一些。
||
控制運算符允許添加另一個命令,這個命令在初始程序語句返回值大于 0 時執行。
[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission deniedAn error occurred while creating the directory.[student@studentvm1 ~]$
當我們使用 &&
和 ||
控制運算符時,使用流控制的復合命令的語法格式通常是下面這樣的形式。
preceding commands ; command1 && command2 || command3 ; following commands
使用控制運算符的復合命令可以在其它命令之前或者之后,這些和控制運算符流控制有關系,但是不受控制運算符流控制的影響。如果不考慮復合命令的流控制中發生的任何事情那么所有的命令都將執行。
當程序出問題時,這些流控制運算符使得在命令中處理出錯和通知我們變得更有效率。我直接在命令行中使用它們,也在腳本中使用。
你可以以 root 用戶的身份來刪除這個目錄和它里面的內容。
[root@studentvm1 ~]# rm -rf /home/student/testdir
到此,關于“Bash中怎么用控制運算符連接命令”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。