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

Bash 初學者系列 7:bash 中的條件語句(if else)

系統 Linux
今天我們介紹一下如何在 bash 中使用條件語句。

在 bash 中使用 if 語句

在絕大多數編程語言中,if 語句都是最基本的條件語句。在 bash 中其語法如下:?

if [ condition ]; then  your codefi

if 語句以 fi(與if相反)結束。

注意空格:

  • 在開始括號之后,與結束括號之前,都必須要有一個空格,否則 shell 將報錯;
  • 條件運算符(=,==,<=等)前后必須有空格,否則將報錯。

我們創建一個示例腳本 root.sh,當你以 root 身份運行該腳本的時候,才會進入 if  語句:?

#!/bin/bash
if [ $(whoami) = 'root' ]; thenecho "You are root"fi

whoami 命令輸出當前用戶名。在 ??bash 變量???教程中,我們介紹了 $(command) 結構的語法用于命令替換。

所以,當你以 root 用戶身份登錄時,條件 $(whoami) = 'root' 才為真。

圖片

if-else 語句

上述代碼中,如果當前用戶不是 root,將看不到任何輸出。當 if 條件為 false 的時候,需要將其執行的代碼放到 else 語句中,如下所示:

#!/bin/bash
if [ $(whoami) = 'root' ]; thenecho "You are root"elseecho "You are not root"fi

此時,當你以普通用戶運行腳本的時候,會輸出 You are not root,如下所示:?

$ ./root.shYou are not

使用 else if 語句

當有多個表達式(條件)時,可以使用 elif(else-if)語句。看下面的例子,我們創建一個名為 age.sh 的腳本:?

#!/bin/bash
AGE=$1
if [ $AGE -lt 13 ]; thenecho "You are a kid."elif [ $AGE -lt 20 ]; thenecho "You are a teenager."elif [ $AGE -lt 65 ]; thenecho "You are an adult."elseecho "You are an elder."fi

上述代碼中的 -lt 即小于(less than)。在前面的文章中我們介紹過如何給 ??bash 腳本傳遞參數???,現在我們運行一下 age.sh,并傳遞不同的參數:?

$You are a kid.$You are a teenager.$You are an adult.$You are an elder.

需要注意的是,在條件語句中,可以有多個 elif ,但是只能有一個 else,且必須使用 fi 關閉。

在 bash 中嵌套使用 if 語句

if 語句可以嵌套使用。看如下 weather.sh 腳本:?

#!/bin/bash
TEMP=$1
if [ $TEMP -gt 5 ]; thenif [ $TEMP -lt 15 ]; thenecho "The weather is cold."elif [ $TEMP -lt 25 ]; thenecho "The weather is nice."elseecho "The weather is hot."fielseecho "It's freezing outside ..."fi

上述腳本接受溫度作為參數,然后顯示一條反應天氣情況的信息。當溫度大于 5 度的時候,就會進入嵌套的 if 語句。我們運行一下該腳本:?

$It's freezing outside ...$The weather is cold.$The weather is nice.$The weather is hot.

在 bash 中使用 case 語句

我們還可以在 bash 中使用 case 語句來替換多個 if 語句,其構造的一般語法如下:?

case "variable" in"pattern1"Command … ;;"pattern2"Command … ;;"pattern2"Command … ;;esac

注意:

  • 條件語句最后總會包含一個空格和右括號 )
  • 條件語句后的命令以兩個分號 ;; 結束,其前面的空格可有可沒有;
  • case 語句 以 esac 結尾(與 case 相反)。

case 語句在處理模式匹配或正則表達式的時候特別有用。作為演示,我們創建一個名為 char.sh 的腳本:?

#!/bin/bash
CHAR=$1
case $CHAR in[a-z])echo "Small Alphabet."[A-Z])echo "Big Alphabet."[0-9])echo "Number."*)echo "Special Character."esac

上述腳本接受一個字符作為參數,并顯示該字符是大寫字母,還是小寫字母、數字還是特殊字符。?

$ ./char.sh aSmall Alphabet.$ ./char.sh ZBig Alphabet.$ ./char.sh 7Number.$ ./char.sh $Special Character.

上述腳本中我使用了通配符 * 來定義默認字符,它相當于 if 語句中的 else 語句。

bash 中的測試條件

有許多測試條件可以與 if 語句一起使用。如果使用數字、字符串或文件,測試條件會有所不同。將它們視為bash中的邏輯運算符。

下表列出一些最常用的測試條件:

條件

相當于

$a -lt $b

$a < $b

$a -gt $b

$a > $b

$a -le $b

$a <= $b

$a -ge $b

$a >= $b

$a -eq $b

$a 等于 $b

$a -ne $b

$a 不等于 $b

-e $FILE

$FILE 存在

-d $FILE

$FILE 存在且是一個目錄.

-f $FILE

$FILE 存在且是一個常規文件.

-L $FILE

$FILE 存在且是一個軟鏈接.

$STRING1 = $STRING2

$STRING1 等于 $STRING2

$STRING1 != $STRING2

$STRING1 不等于 $STRING2

-z $STRING1

$STRING1 是空的

上面這些測試條件不需要專門記,可以在 man 手冊中查看:

$ man test

我們創建一個名為 filetype.sh 的腳本,用來檢查文件是常規文件、目錄還是軟鏈接:?

#!/bin/bash
if [ $# -ne 1 ]; thenecho "Error: Invalid number of arguments"exitfi
file=$1
if [ -f $file ]; thenecho "$fileelif [ -L $file ]; thenecho "$fileelif [ -d $file ]; thenecho "$fileelseecho "$filefi

在腳本的開始,我們檢查一下參數的數量,如果沒有參數或者有多個參數,腳本會輸出一條消息并退出。下面是運行情況:?

$ ./filetype.sh weather.shweather.sh is a regular file.$ ./filetype.sh /bin/bin is a soft link.$ ./filetype.sh /var/var$ ./filetype.sh Error: Invalid number of arguments

在同一行中編寫 if else 語句

到目前為止,我們上述代碼都是在規范的縮進格式下寫的,這是一種規范的寫法,但并不是非這樣寫不可。

當你只想在 shell 中看到結果時,可以在單行中使用 if else 語句。

假設我們有如下腳本:?

if [ $(whoami) = 'root' ]; thenecho "You are root"elseecho "You are not root"fi

可以在一行代碼中這樣寫:

if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fi

大家可以運行一下上面的腳本,看看結果。

基本上,就是在命令結束后添加分號 ; ,然后寫下一條語句。

責任編輯:龐桂玉 來源: TIAP
相關推薦

2022-12-13 12:55:15

Bash循環

2022-11-30 07:47:00

Bash腳本

2022-12-08 12:05:03

Bash字符串

2022-12-02 14:30:24

Bash腳本數組

2022-12-01 08:10:49

Bash腳本參數

2022-12-14 10:08:00

BashLinux

2022-12-16 09:01:24

2022-12-07 07:43:21

2023-08-11 15:46:40

BashIf Else 語句

2022-11-28 08:01:47

BashLinuxshell 腳本

2022-10-19 23:18:27

KubernetesPod錯誤

2014-01-03 14:09:57

Git學習

2011-06-17 15:25:18

Qt

2023-08-22 21:42:03

Bash函數

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2009-11-13 15:46:25

Java多線程

2011-04-12 10:13:24

2010-11-24 16:15:09

UI設計Windows Pho

2011-07-04 14:14:54

java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97视频在线免费 | 成人精品一区二区三区 | 91高清免费观看 | 国产一级免费在线观看 | 天堂一区二区三区四区 | 一级做a爰片性色毛片16 | 一级看片免费视频囗交动图 | 成人免费小视频 | 国产乱码精品一品二品 | 日本欧美在线视频 | 天堂网中文 | 精品视频久久久久久 | 欧美激情精品久久久久久变态 | 天天爽网站 | 久久国色 | 色婷婷综合久久久中字幕精品久久 | 亚洲一区在线日韩在线深爱 | a级大毛片 | 99reav| 91在线影院 | 久久久高清 | 欧美激情在线精品一区二区三区 | 久久综合成人精品亚洲另类欧美 | 中文字幕在线网 | 国产精品不卡一区 | 久久精品免费一区二区 | 日韩中文字幕视频在线观看 | 岛国av免费看 | 国产成人午夜精品影院游乐网 | 香蕉一区二区 | 国产精品日韩一区 | 最新午夜综合福利视频 | 99精品免费久久久久久日本 | 午夜性视频 | 日韩伦理一区二区三区 | av一二三四 | 亚洲视频欧美视频 | 国产自产21区| 久久久久久99 | 91社区在线观看播放 | 另类在线 |