欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell中if-then的高級使用

 更新時間:2024年11月01日 09:35:38   作者:靜聽山水  
在Shell腳本編程中,if-then語句是基本的邏輯控制結(jié)構(gòu),用于根據(jù)條件執(zhí)行代碼,本文介紹了if-then的基本語法、條件表達(dá)式、使用單雙括號的區(qū)別及高級特性,感興趣的可以了解一下

在 Shell 腳本中,if-then 語句是最基本的邏輯控制結(jié)構(gòu)之一,用于根據(jù)條件執(zhí)行不同的代碼塊。以下是關(guān)于 if-then 語句的基本結(jié)構(gòu)、語法以及一些示例。

基本語法

if 條件表達(dá)式; then
    # 當(dāng)條件表達(dá)式為真時執(zhí)行的命令
    命令1
    命令2
    ...
else
    # 當(dāng)條件表達(dá)式為假時執(zhí)行的命令
    命令A(yù)
    命令B
    ...
fi

詳細(xì)解釋

  • if 關(guān)鍵字

    • if 關(guān)鍵字開始一個條件判斷。
  • 條件表達(dá)式

    • 條件表達(dá)式可以是關(guān)系表達(dá)式、邏輯表達(dá)式或其他任何形式的布爾表達(dá)式。
    • 條件表達(dá)式通常放在圓括號 () 中,以提高可讀性和避免解析錯誤。
  • then 關(guān)鍵字

    • then 關(guān)鍵字表示條件表達(dá)式之后的代碼塊開始。
  • 命令塊

    • 當(dāng)條件表達(dá)式為真時,執(zhí)行 then 后面的命令塊。
  • else 關(guān)鍵字(可選)

    • else 關(guān)鍵字表示當(dāng)條件表達(dá)式為假時執(zhí)行的代碼塊。
    • else 塊是可選的,如果不需要處理條件為假的情況,可以省略。
  • fi 關(guān)鍵字

    • fi 關(guān)鍵字結(jié)束整個 if 語句。

示例

示例 1:基本用法

#!/bin/bash

# 獲取用戶輸入
read -p "請輸入一個數(shù)字: " num

# 判斷數(shù)字是否大于10
if [ "$num" -gt 10 ]; then
    echo "數(shù)字大于10"
else
    echo "數(shù)字小于或等于10"
fi

示例 2:使用邏輯運(yùn)算符

#!/bin/bash

# 獲取用戶輸入
read -p "請輸入一個數(shù)字: " num

# 判斷數(shù)字是否在1到10之間
if [ "$num" -ge 1 ] && [ "$num" -le 10 ]; then
    echo "數(shù)字在1到10之間"
else
    echo "數(shù)字不在1到10之間"
fi

示例 3:嵌套 if-then 語句

#!/bin/bash

# 獲取用戶輸入
read -p "請輸入一個數(shù)字: " num

# 判斷數(shù)字是否為正數(shù)、負(fù)數(shù)還是零
if [ "$num" -gt 0 ]; then
    echo "數(shù)字是正數(shù)"
elif [ "$num" -lt 0 ]; then
    echo "數(shù)字是負(fù)數(shù)"
else
    echo "數(shù)字是零"
fi

條件表達(dá)式

1. 數(shù)值比較

# 比較數(shù)值
[ "$num" -eq 10 ]       # 等于
[ "$num" -ne 10 ]       # 不等于
[ "$num" -gt 10 ]       # 大于
[ "$num" -lt 10 ]       # 小于
[ "$num" -ge 10 ]       # 大于或等于
[ "$num" -le 10 ]       # 小于或等于

2. 字符串比較

# 比較字符串
[ "$str" = "hello" ]    # 等于
[ "$str" != "hello" ]   # 不等于
[ "$str" \< "hello" ]   # 字典序小于
[ "$str" \> "hello" ]   # 字典序大于

3. 文件測試

# 測試文件屬性
[ -f "$file" ]          # 是普通文件
[ -d "$file" ]          # 是目錄
[ -r "$file" ]          # 可讀
[ -w "$file" ]          # 可寫
[ -x "$file" ]          # 可執(zhí)行
[ -s "$file" ]          # 文件非空

示例 4:文件測試

#!/bin/bash

# 獲取用戶輸入的文件名
read -p "請輸入一個文件名: " filename

# 測試文件是否存在且為普通文件
if [ -f "$filename" ]; then
    echo "文件存在且為普通文件"
else
    echo "文件不存在或不是普通文件"
fi

bash shell還提供了3個可在if-then語句中使用的高級特性。

  • 在子shell中執(zhí)行命令的單括號。
  • 用于數(shù)學(xué)表達(dá)式的雙括號。
  • 用于高級字符串處理功能的雙方括號。

接下來將詳細(xì)描述各個特性。

使用單括號

單括號允許在if語句中使用子shell。單括號形式的test命令格式如下:

(command)

在bash shell執(zhí)行command之前,會先創(chuàng)建一個子shell,然后在其中執(zhí)行命令。如果命令成功結(jié)束,則退出狀態(tài)碼會被設(shè)為0,then部分的命令就會被執(zhí)行。如果命令的退出狀態(tài)碼不為0,則不執(zhí)行then部分的命令。來看一個使用子shell進(jìn)行測試的例子:

$ cat SingleParentheses.sh
#!/bin/bash
# Testing a single parentheses condition
#
echo $BASH_SUBSHELL
#
if (echo $BASH_SUBSHELL)
then
    echo "The subshell command operated successfully."
#
else
    echo "The subshell command was NOT successful."
#
fi
$
$ ./SinglePArentheses.sh
01
The subshell command operated successfully.

當(dāng)腳本第一次(在if語句之前)執(zhí)行echo $BASH_SUBSHELL命令時,是在當(dāng)前shell中完成的。該命令會輸出0,表明沒有使用子shell。在if語句內(nèi),腳本在子shell中執(zhí)行echo $BASH_SUBSHELL命令,該命令會輸出1,表明使用了子shell。子shell操作成功結(jié)束,接下來是執(zhí)行then部分的命令。

警告        當(dāng)你在if test語句中使用進(jìn)程列表時,可能會出現(xiàn)意料之外的結(jié)果。哪怕進(jìn)程列表中除最后一個命令之外的其他命令全都失敗,子shell仍會將退出狀態(tài)碼設(shè)為0,then部分的命令將得以執(zhí)行。 

 對腳本略作修改,來看一個在子shell中執(zhí)行失敗的例子:

$ cat SingleParentheses.sh
#!/bin/bash
# Testing a single parentheses condition
#
echo $BASH_SUBSHELL
#
if (cat /etc/PASSWORD)
then
    echo "The subshell command operated successfully."
#
else
    echo "The subshell command was NOT successful."
#
fi
$
$ ./SinglePArentheses.sh
cat: /etc/PASSWORD: NO such file or directory
The subshell command was NOT successful.

因為子shell中的命令指定了錯誤的文件名,所以退出狀態(tài)碼被設(shè)為非0。接下來則執(zhí)行else部分的命令。

使用雙括號 

雙括號命令允許在比較過程中使用高級數(shù)學(xué)表達(dá)式。test命令在進(jìn)行比較的時候只能使用簡單的算術(shù)操作。雙括號命令提供了更多的數(shù)學(xué)符號,這些符號對有過其他編程語言經(jīng)驗的程序員而言并不陌生。雙括號命令的格式如下:

((expression))

expression可以是任意的數(shù)學(xué)賦值或比較表達(dá)式。除了test命令使用的標(biāo)準(zhǔn)數(shù)學(xué)運(yùn)算符,表還列出了雙括號中可用的其他運(yùn)算符。

雙括號命令符號

符號描述
val++后增
val--后減
++val先增
--val先減
!邏輯求反
~位求反
**冪運(yùn)算
<<左位移
>>右位移
&位布爾AND
|位布爾OR
&&

邏輯AND

||邏輯OR

雙括號命令既可以在if語句中使用,也可以在腳本中的普通命令里用來賦值:

$ cat DoubleParentheses.sh
#!/bin/bash
# Testing a double parentheses command
#
val1=10
#
if (( $val1 ** 2 > 90 ))
then
    (( val2 = $val1 ** 2 ))
    echo "The square of $val1 is $val2,"
    echo "which is greater than 90."
#
fi
$
$ ./DoubleParentheses.sh
The square of 10 is 100,
which is greater than 90.

注意,雙括號中表達(dá)式的大于號不用轉(zhuǎn)義。這是雙括號命令又一個優(yōu)越性的體現(xiàn)。

使用雙方括號 

雙方括號命令提供了針對字符串比較的高級特性。雙方括號的格式如下:

[[ expression ]]

expression可以使用test命令中的標(biāo)準(zhǔn)字符串比較。除此之外,它還提供了test命令所不具備的另一個特性——模式匹配。

注意        雙方括號在bash shell中運(yùn)行良好。不過要小心,不是所有的shell都支持雙方括號。

在進(jìn)行模式匹配時,可以定義通配符或正則表達(dá)式來匹配字符串:

$ cat DoubleBrackets.sh
#!/bin/bash
# Using double brackets for pattern matching
#
#
if [[ $BASH_VERSION == 5.* ]]
then
    echo "You are using the Bash Shell version 5 series."
fi
$
$ ./DoubleBrackets.sh
You are using the Bash Shell version 5 series.

上述腳本中使用了雙等號(==)。雙等號會將右側(cè)的字符串(5.*)視為一個模式并應(yīng)用模式匹配規(guī)則。雙方括號命令會對$BASH_VERSION環(huán)境變量進(jìn)行匹配,看是否以字符串5.起始。如果是,則測試通過,shell會執(zhí)行then部分的命令。 

總結(jié)

if-then 語句是 Shell 腳本中最基本的邏輯控制結(jié)構(gòu)之一,用于根據(jù)條件執(zhí)行不同的代碼塊。通過組合不同的條件表達(dá)式和邏輯運(yùn)算符,可以實(shí)現(xiàn)復(fù)雜的邏輯判斷。

到此這篇關(guān)于shell中if-then的高級使用的文章就介紹到這了,更多相關(guān)shell if-then內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux shell(.sh)腳本編寫和運(yùn)行入門

    linux shell(.sh)腳本編寫和運(yùn)行入門

    這篇文章主要介紹了linux shell(.sh)腳本編寫和運(yùn)行入門,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Shell腳本實(shí)現(xiàn)精準(zhǔn)清除Squid緩存

    Shell腳本實(shí)現(xiàn)精準(zhǔn)清除Squid緩存

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)精準(zhǔn)清除Squid緩存,本文腳本是張宴同學(xué)腳本的個人優(yōu)化版,生產(chǎn)環(huán)境使用效果不錯,所以分享給大家,需要的朋友可以參考下
    2015-01-01
  • Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法

    Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法

    這篇文章主要介紹了Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法,本文總結(jié)了5種方法,并分別給出了代碼實(shí)例,需要的朋友可以參考下
    2014-10-10
  • Shell腳本判斷Linux系統(tǒng)是32位還是64位的幾種方法分享

    Shell腳本判斷Linux系統(tǒng)是32位還是64位的幾種方法分享

    這篇文章主要介紹了Shell腳本判斷Linux系統(tǒng)是32位還是64位的幾種方法分享,本文共給出了4種方法實(shí)現(xiàn)系統(tǒng)位數(shù)在判斷,需要的朋友可以參考下
    2014-12-12
  • 使用Shell腳本如何啟動/停止Java的jar程序

    使用Shell腳本如何啟動/停止Java的jar程序

    這篇文章主要介紹了使用Shell腳本如何啟動/停止Java的jar程序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • shell版Nginx日志蜘蛛爬取查看腳本

    shell版Nginx日志蜘蛛爬取查看腳本

    這篇文章主要介紹了shell版Nginx日志蜘蛛爬取查看腳本的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • Shell腳本實(shí)現(xiàn)獲取網(wǎng)頁快照并生成縮略圖

    Shell腳本實(shí)現(xiàn)獲取網(wǎng)頁快照并生成縮略圖

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)獲取網(wǎng)頁快照并生成縮略圖,本文獲取網(wǎng)頁快照使用phantomjs、生成縮略圖使用ImageMagick,需要的朋友可以參考下
    2015-02-02
  • 一文掌握Linux命令lsscsi

    一文掌握Linux命令lsscsi

    想要弄明白lsscsi命令,首先我們必須搞清楚什么是SCSI,以及常見的硬盤接口,常用的硬盤參數(shù),今天通過本文給大家介紹下Linux命令lsscsi,需要的朋友可以參考下
    2022-09-09
  • Shell 命令啟動Docker Container的實(shí)現(xiàn)

    Shell 命令啟動Docker Container的實(shí)現(xiàn)

    本文主要介紹了Shell 命令啟動Docker Container的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Shell腳本統(tǒng)計文件行數(shù)的8種方法

    Shell腳本統(tǒng)計文件行數(shù)的8種方法

    這篇文章主要介紹了Shell腳本統(tǒng)計文件行數(shù)的8種方法,本文講解了獲取單個文件行數(shù)、獲取特定目錄所有文件的行數(shù)兩種需求共計8種方法,需要的朋友可以參考下
    2015-03-03

最新評論