成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Bash中使用控制運(yùn)算符連接命令

系統(tǒng) Linux
在命令行中,使用控制運(yùn)算符為復(fù)合命令添加邏輯。經(jīng)常會使用一些簡單的復(fù)合指令,比如說在一個命令行中連接幾個命令。這些命令使用分號分隔,表示一個命令結(jié)束。

[[252440]]

在命令行中,使用控制運(yùn)算符為復(fù)合命令添加邏輯。

經(jīng)常會使用一些簡單的復(fù)合指令,比如說在一個命令行中連接幾個命令。這些命令使用分號分隔,表示一個命令結(jié)束。為了在一個命令行中創(chuàng)建一系列簡單的 shell 命令,只需要使用分號把每一條命令分隔開,就像下面這樣:

  1. command1 ; command2 ; command3 ; command4 ;

***一個分號你可以不用添加,因?yàn)楫?dāng)你按下回車鍵時就表示一個命令的結(jié)束,但是為了和其它的保持一致,還是建議加上比較好。

所有的命令執(zhí)行都沒有什么問題 —— 只要沒有什么意外發(fā)生。但是當(dāng)出問題時到底發(fā)生了什么呢?我們可以預(yù)測,并且通過 Bash 中內(nèi)置的 &&|| 運(yùn)算符跟蹤這些錯誤。這兩個控制運(yùn)算符提供了一些流控制,可以讓我們改變代碼執(zhí)行隊(duì)列的順序。分號和換行符也被認(rèn)為是 Bash 的控制運(yùn)算符。

&& 運(yùn)算符意義簡單來說就是“如果 command1 執(zhí)行成功,就接著執(zhí)行 command2。”如果 command1 因?yàn)槿魏卧驁?zhí)行失敗,那么 command2 將不執(zhí)行。這個語法看下來像這樣:

  1. command1 && command2

這樣寫是允許的,因?yàn)槊恳粋€命令都會返回一個值(RC)給 shell 來表示這個命令在執(zhí)行的過程中是否執(zhí)行成功或者失敗。通常,返回值是 0 表示成功,而一個正數(shù)值表示不同種類的錯誤。有一些系統(tǒng)管理工具僅僅返回一個 1 來表示所有的錯誤,但是也有很多工具使用其它的正數(shù)的返回值來表示各種類型錯誤。

我們可以很容易的使用腳本來檢查 shell 變量 $?,可以通過命令列表中的下一個命令,或者可以直接使用系統(tǒng)管理工具檢查。我們一起來看這些返回值。運(yùn)行一個簡單的命令然后立即檢查它的返回值,這個返回值始終是屬于***一個運(yùn)行的命令。

  1. [student@studentvm1 ~]$ ll ; echo "RC = $?"
  2. total 284
  3. -rw-rw-r--  1 student student   130 Sep 15 16:21 ascii-program.sh
  4. drwxrwxr-x  2 student student  4096 Nov 10 11:09 bin
  5. <snip>
  6. drwxr-xr-x. 2 student student  4096 Aug 18 10:21 Videos
  7. RC = 0
  8. [student@studentvm1 ~]$

這個返回值是 0,表示這個命令執(zhí)行成功了。現(xiàn)在嘗試使用同樣的命令在一些我們沒有權(quán)限的目錄上。

  1. [student@studentvm1 ~]$ ll /root ; echo "RC = $?"
  2. ls: cannot open directory '/root': Permission denied
  3. RC = 2
  4. [student@studentvm1 ~]$

這個返回值的含義可以在 ls 命令的 man 頁面 中找到。

現(xiàn)在我們來試試 && 這個控制運(yùn)算符,因?yàn)樗部赡軙挥迷谝粋€命令行程序中。我們將從一個簡單的示例開始:創(chuàng)建一個新目錄,如果創(chuàng)建成功就在這個目錄中創(chuàng)建一個文件。

我們需要一個目錄可以創(chuàng)建其它的目錄。首先,在你的家目錄中創(chuàng)建一個臨時的目錄用來做測試。

  1. [student@studentvm1 ~]$ cd ; mkdir testdir

~/testdir 中新建一個目錄,這也應(yīng)該是一個空目錄,因?yàn)槭悄銊倓倓?chuàng)建的,然后創(chuàng)建一個新的空文件在這個新目錄中。下面的命令可以做這些事情。

  1. [student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1
  2. [student@studentvm1 ~]$ ll ~/testdir/testdir2/
  3. total 0
  4. -rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1
  5. [student@studentvm1 ~]$

我們看到一切都運(yùn)行得很好,因?yàn)?testdir 目錄是訪問且可寫的。然后我們改變 testdir 目錄的權(quán)限,讓用戶 student 不再具有訪問的權(quán)限。操作如下:

  1. [student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdir
  2. d---rwxrw-. 3 student student  4096 Nov 12 14:13 testdir
  3. [student@studentvm1 ~]$

在長列表(ll)命令后面使用 grep 命令來列出 testdir 目錄。你可以看到用戶 student 不再有 testdir 目錄的訪問權(quán)限。現(xiàn)在我們像之前一樣運(yùn)行同樣的命令,但是在 testdir 目錄中創(chuàng)建的是一個不同的目錄。

  1. [student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1
  2. mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
  3. [student@studentvm1 ~]$

盡管我們也同樣得到了一個錯誤的消息,但 && 控制運(yùn)算符阻止了 touch 命令的運(yùn)行,因?yàn)樵趧?chuàng)建 testdir3 目錄的時候發(fā)生了錯誤。通過這種復(fù)合的流控制可以阻止一些錯誤的發(fā)生使事情變亂。但是這樣看起來變得稍微復(fù)雜了一些。

|| 控制運(yùn)算符允許添加另一個命令,這個命令在初始程序語句返回值大于 0 時執(zhí)行。

  1. [student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."
  2. mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
  3. An error occurred while creating the directory.
  4. [student@studentvm1 ~]$

當(dāng)我們使用 &&|| 控制運(yùn)算符時,使用流控制的復(fù)合命令的語法格式通常是下面這樣的形式。

  1. preceding commands ; command1 && command2 || command3 ; following commands

使用控制運(yùn)算符的復(fù)合命令可以在其它命令之前或者之后,這些和控制運(yùn)算符流控制有關(guān)系,但是不受控制運(yùn)算符流控制的影響。如果不考慮復(fù)合命令的流控制中發(fā)生的任何事情那么所有的命令都將執(zhí)行。

當(dāng)程序出問題時,這些流控制運(yùn)算符使得在命令中處理出錯和通知我們變得更有效率。我直接在命令行中使用它們,也在腳本中使用。

你可以以 root 用戶的身份來刪除這個目錄和它里面的內(nèi)容。

  1. [root@studentvm1 ~]# rm -rf /home/student/testdir

你是怎樣使用 Bash 控制運(yùn)算符的呢?在評論區(qū)中告訴我們。 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2025-02-24 11:16:20

2009-08-11 15:51:08

C#運(yùn)算符算術(shù)運(yùn)算符

2020-06-18 10:26:43

JavaScript開發(fā)技術(shù)

2009-08-12 15:20:18

C#賦值運(yùn)算符復(fù)合賦值運(yùn)算符

2009-08-12 15:02:49

C#賦值運(yùn)算符簡單賦值運(yùn)算符

2009-11-18 09:37:31

PHP邏輯運(yùn)算符

2009-11-18 09:02:55

PHP運(yùn)算符

2023-04-10 08:58:13

C#關(guān)系運(yùn)算符

2020-06-04 08:17:44

JavaScript延展操作運(yùn)算符開發(fā)

2023-10-04 00:01:00

sizeofC 語言

2021-07-12 15:35:56

JavaScript代碼運(yùn)算符

2024-02-26 15:17:20

2009-06-21 13:48:05

ShellLinux運(yùn)算符

2021-12-15 10:25:57

C++運(yùn)算符重載

2016-10-14 14:04:34

JAVA語法main

2009-08-12 09:30:10

C#??運(yùn)算符

2022-12-07 07:43:21

2022-11-23 08:14:42

bash 腳本test 命令

2009-08-12 10:47:03

C#運(yùn)算符重載

2022-09-07 00:04:37

JavaScript運(yùn)算符技巧
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久国产婷婷国产香蕉 | 99热都是精品 | 日韩精品一区二区三区中文字幕 | 日韩中文字幕在线观看 | 一区二区成人在线 | 国产美女精品视频 | 国产欧美精品一区二区色综合朱莉 | 国产欧美精品一区二区色综合朱莉 | 亚洲欧美中文日韩在线v日本 | 亚洲欧洲日韩精品 中文字幕 | 亚洲自拍偷拍视频 | 国产91在线观看 | 天天影视网天天综合色在线播放 | av在线天天| 亚洲女人天堂网 | 欧美日韩在线成人 | 91在线精品视频 | 中文字幕av亚洲精品一部二部 | 免费黄色av网站 | 亚洲影音 | 日韩久久久久久 | 一区二区三区欧美 | 国产农村妇女毛片精品久久麻豆 | 亚洲国内精品 | 国产精品久久久久久52avav | 一区二区精品视频 | 午夜成人免费视频 | 亚洲免费一区二区 | 亚洲精品乱码久久久久久9色 | 久久这里有精品 | 国产一二三视频在线观看 | 国产一区欧美 | www.婷婷 | 中文字幕在线视频一区二区三区 | 国产美女自拍视频 | 免费观看毛片 | 伊人av在线播放 | 久久国产成人 | 亚洲免费毛片 | 亚洲网站观看 | 国产精品久久久久久久久久尿 |