shell中內建關鍵字 檢查條件是否成立

2022-07-27 11:51:16 字數 2422 閱讀 1672

[[ ]] 對數字的比較不友好,所以使用 if 判斷條件時,建議用(())來處理整型數字,用來處理字串或者檔案。

用法說明

指令碼支援邏輯運算子

(())

((expression))

不需要注意空格

在 (( )) 中使用變數可以加也可以不加$字首,(( )) 會自動解析變數名

只用於進行整數運算

可以使用<、<=、>、>=等進行整數運算

表示式可以只有乙個,也可以有多個,多個表示式之間以逗號,分隔

對於多個表示式的情況,以最後乙個表示式的值作為整個 (( )) 命令的執行結果

支援邏輯運算子,邏輯運算子為&& ||

((a>7 && b==c))

test/

test expression

或[ expression ]

注意空格

shell 內建命令

>、<、== 只能用來比較字串

比較數字需要使用 -eq、-gt 等選項;

不管是比較字串還是數字,test 都不支援 >= 和 <=。

變數名建議用雙引號""包圍起來

比較字串時需要對 >、<進行轉義

支援邏輯運算子,邏輯運算子為-o -a

[ -z "$str1" ]||[ -z "$str2" ]#建議對變數名加雙引號

[[$str1\<$str2]]#需要對 < 進行轉義

[ -z "$str1" ] || [ -z "$str2" ]

使用-o -a !選項

[ -z "$str1" -o -z "$str2" ]

[ -z "$str1" || -z "$str2" ]

×

[[ ]] 是test 的公升級版,對細節進行了優化,並且擴充套件了一些功能

[[ expression ]]

注意空格

shell 內建關鍵字,不是命令,在使用時沒有給函式傳遞引數的過程,所以 test 命令的某些注意事項在 [[ ]] 中就不存在了

>、<、== 只能用來比較字串

比較數字需要使用 -eq、-gt 等選項;

不需要把變數名用雙引號""包圍起來,即使變數是空值,也不會出錯。

不需要、也不能對 >、< 進行轉義,轉義後會出錯

支援正規表示式!!

支援邏輯運算子,邏輯運算子為&& ||

[[ -z $str1 ]] || [[ -z $str2 ]] #不需要對變數名加雙引號

[[ $str1 < $str2 ]] #不需要也不能對 < 進行轉義

[[ ]] 剔除了 test 命令的-o-a選項,你只能使用 || 和 &&

[[ -z $str1 ]]||[[ -z $str2 ]]

[[ -z $str1 -o -z $str2 ]]

×

使用邏輯運算子

[[ -z $str1 || -z $str2 ]]

在 shell [[ ]] 中,可以使用=~來檢測字串是否符合某個正規表示式,它的用法為:

[[ str =~ regex ]]    其中,str 表示字串,regex 表示正規表示式。

功能指令碼

結果說明

檢測乙個字串是否是手機號

#!/bin/bash

read tel

if [[ $tel =~ ^1[0-9]$ ]]

then

echo "你輸入的是手機號碼"

else

echo "你輸入的不是手機號碼"

fi執行結果1:

13203451100

你輸入的是手機號碼

執行結果2:

132034511009

你輸入的不是手機號碼

^1[0-9]$的說明:

《正規表示式30分鐘入門教程》

shell擷取檔案中的關鍵字

實現方法有如下幾種 expr substr a 1 8 echo a awk echo a cut c1 8 echo expr a echo a dd bs 1 count 8 2 dev null 1 第一種方法 從左向右擷取最後乙個string後的字串 從左向右擷取第乙個string後的字串 ...

Go內建關鍵字分析(一)

go語言中總共有25個關鍵字,如下所示 作用 定義變數 舉例 var x int 4 or x 4注意 a.在函式 中,簡潔賦值語句在明確型別的 前提下,可以用於替代 var 定義。b.結構不能使用在函式外,函式外的每個語法塊都必須以關鍵字開始。演示 package main import fmt ...

C 中struct關鍵字和class關鍵字的區別

剛開始接觸 c 看到 中有struct關鍵字,還以為是用了結構體,結果後來發現 struct 和 class 一樣都用於類的定義,於是把兩者的差別記錄於此。一句話總結 兩者均可用於定義類,唯一的區別是兩者定義的類的預設訪問許可權有差別。其實比兩者差別更重要的是,我很好奇為什麼 c 中會存在兩個用於定...