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

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

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

在 bash 中使用 if 語句

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

if [ condition ]; then  your codefi

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

注意空格:

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

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

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

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

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

圖片

if-else 語句

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

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

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

$ ./root.shYou are not

使用 else if 語句

當(dāng)有多個表達式(條件)時,可以使用 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 腳本傳遞參數(shù)???,現(xiàn)在我們運行一下 age.sh,并傳遞不同的參數(shù):?

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

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

在 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

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

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

在 bash 中使用 case 語句

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

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

注意:

  • 條件語句最后總會包含一個空格和右括號 );
  • 條件語句后的命令以兩個分號 ;; 結(jié)束,其前面的空格可有可沒有;
  • case 語句 以 esac 結(jié)尾(與 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

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

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

上述腳本中我使用了通配符 * 來定義默認(rèn)字符,它相當(dāng)于 if 語句中的 else 語句。

bash 中的測試條件

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

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

條件

相當(dāng)于

$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

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

$ ./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ī)范的寫法,但并不是非這樣寫不可。

當(dāng)你只想在 shell 中看到結(jié)果時,可以在單行中使用 if else 語句。

假設(shè)我們有如下腳本:?

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

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

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

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

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

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

2022-12-13 12:55:15

Bash循環(huán)

2022-11-30 07:47:00

Bash腳本

2022-12-08 12:05:03

Bash字符串

2022-12-02 14:30:24

Bash腳本數(shù)組

2022-12-01 08:10:49

Bash腳本參數(shù)

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學(xué)習(xí)

2011-06-17 15:25:18

Qt

2023-08-22 21:42:03

Bash函數(shù)

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-04-12 10:13:24

2009-11-13 15:46:25

Java多線程

2010-11-24 16:15:09

UI設(shè)計Windows Pho

2011-07-04 14:14:54

java
點贊
收藏

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

主站蜘蛛池模板: 黄色毛片免费视频 | 日韩成人影院在线观看 | 午夜专区 | 激情欧美一区二区三区中文字幕 | 亚洲精品二区 | 精品国产1区2区3区 在线国产视频 | 四虎最新视频 | 久久久久久高潮国产精品视 | www国产成人免费观看视频,深夜成人网 | 天堂在线网| 一区视频在线免费观看 | 日本成人三级电影 | 一区二区三区四区不卡视频 | 亚洲一区二区在线播放 | 在线看中文字幕 | 成人在线小视频 | 日韩国产一区二区三区 | 欧美日韩国产高清 | 亚洲天堂日韩精品 | 干干干日日日 | 午夜天堂精品久久久久 | 成人欧美日韩一区二区三区 | 日韩在线免费视频 | 91大神在线资源观看无广告 | 久草成人 | 亚州成人 | 国产午夜精品理论片a大结局 | 天天干亚洲| 粉嫩av久久一区二区三区 | 国产一区二区三区四区 | 欧美高清视频一区 | 欧美性另类 | 精品91| 国产精品高 | 我要看黄色录像一级片 | www.日韩| 国产区一区二区三区 | 国产美女久久久 | 亚洲一区二区精品视频在线观看 | 久久亚洲天堂 | 国产精品久久久久久久久久 |