自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

在 bash 中使用 if 語句

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

if [ condition ]; then  your codefi

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

注意空格:

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

我們創(chuàng)建一個示例腳本 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 的時候,需要將其執(zhí)行的代碼放到 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)語句??聪旅娴睦樱覀儎?chuàng)建一個名為 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 語句在處理模式匹配或正則表達式的時候特別有用。作為演示,我們創(chuàng)建一個名為 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 存在且是一個常規(guī)文件.

-L $FILE

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

$STRING1 = $STRING2

$STRING1 等于 $STRING2

$STRING1 != $STRING2

$STRING1 不等于 $STRING2

-z $STRING1

$STRING1 是空的

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

$ man test

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

#!/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 語句

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

當你只想在 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循環(huán)

2022-12-08 12:05:03

Bash字符串

2022-11-30 07:47:00

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學習

2023-08-22 21:42:03

Bash函數

2011-06-17 15:25:18

Qt

2009-11-13 15:46:25

Java多線程

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-04-12 10:13:24

2010-11-24 16:15:09

UI設計Windows Pho

2011-07-04 14:14:54

java
點贊
收藏

51CTO技術棧公眾號