最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell中if-then的高級使用

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

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

基本語法

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

詳細解釋

  • if 關(guān)鍵字

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

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

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

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

    • else 關(guān)鍵字表示當(dāng)條件表達式為假時執(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:使用邏輯運算符

#!/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ù)、負數(shù)還是零
if [ "$num" -gt 0 ]; then
    echo "數(shù)字是正數(shù)"
elif [ "$num" -lt 0 ]; then
    echo "數(shù)字是負數(shù)"
else
    echo "數(shù)字是零"
fi

條件表達式

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é)表達式的雙括號。
  • 用于高級字符串處理功能的雙方括號。

接下來將詳細描述各個特性。

使用單括號

單括號允許在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進行測試的例子:

$ 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語句中使用進程列表時,可能會出現(xiàn)意料之外的結(jié)果。哪怕進程列表中除最后一個命令之外的其他命令全都失敗,子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é)表達式。test命令在進行比較的時候只能使用簡單的算術(shù)操作。雙括號命令提供了更多的數(shù)學(xué)符號,這些符號對有過其他編程語言經(jīng)驗的程序員而言并不陌生。雙括號命令的格式如下:

((expression))

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

雙括號命令符號

符號描述
val++后增
val--后減
++val先增
--val先減
!邏輯求反
~位求反
**冪運算
<<左位移
>>右位移
&位布爾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.

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

使用雙方括號 

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

[[ expression ]]

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

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

在進行模式匹配時,可以定義通配符或正則表達式來匹配字符串:

$ 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)境變量進行匹配,看是否以字符串5.起始。如果是,則測試通過,shell會執(zhí)行then部分的命令。 

總結(jié)

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

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

相關(guān)文章

最新評論

诸暨市| 大渡口区| 兰州市| 靖西县| 保山市| 湘西| 呼和浩特市| 新竹县| 亳州市| 佳木斯市| 离岛区| 绩溪县| 慈溪市| 防城港市| 沙坪坝区| 渭南市| 潢川县| 广汉市| 西宁市| 诸城市| 四会市| 隆尧县| 密山市| 静乐县| 金山区| 汉阴县| 古蔺县| 南岸区| 襄城县| 文山县| 张掖市| 集安市| 施甸县| 镇宁| 平和县| 丹东市| 乌兰浩特市| 彭州市| 会泽县| 宁都县| 廊坊市|