bash的特有擴充套件屬性

liwl1991發表於2024-10-07

1.[[ ]] 符合匹配

#!/bin/bash
name=$1
if [[ "${name}" =~ ^li* ]]; then
	echo "以li開頭"
else
	echo "不以li開頭"
fi
#
if [[ "${name}"  == "liwl" ]] || [[ "${name}" == "liwanliang" ]]; then
	echo ""
fi

2. $(( )) 數學計算

#!/bin/bash
a=$1
b=$2
echo $(( ${a} + ${b} ))

3. $( )執行命令或者函式

當需要把命令或者函式執行結果賦值給變數時,使用$()進行操作

#!/bin/bash
function print_name(){
	echo "liwl"
}
name=$(print_name)
echo "${name}"
#
myhostname=$(hostname)
echo "${myhostname}"

4. 字串剪裁

匹配的字串被剪裁,生成新的字串。記憶方法:鍵盤上#符號在左,%符號在右。一個符號不貪婪,兩個符號鉅貪婪

注意:未改變舊字串變數,需要用新的變數來儲存結果

#!/bin/bash
domain="www.liwl.cn"
echo "字串:${#domain}"
#
echo "從左往右非貪婪模式匹配: ${domain#*.}" #結果:liwl.cn
echo "從左往右貪婪模式匹配: ${domain##*.}" #結果:cn
#
echo "從右往左非貪婪模式匹配: ${domain%.*}" #結果:www.liwl
echo "從右往左貪婪模式匹配: ${domain%%.*}" #結果:www

剪裁常用於:IP地址,域名,檔案路徑等規律性字串

另外一種剪裁是按照順序:

#!/bin/bash
name="liwanliang"
echo "從左數的第4個字串開始剪裁,${name:4}"
echo "從右數第4個字串開始剪裁:${name: -4}" #:和-直接,有空格。無空格表示如果變數值沒有值時,提供預設值
#!/bin/bash
name="liwanliang"
echo "${name:-4}" #輸出liwanliang
echo "${name: -4}" #輸出iang
name=""
echo "${name:-4}" #輸出4
echo "${name: -4}" #輸出空

5. 字串替換

#!/bin/bash
LDAP=$(egrep -w ldap /etc/passwd)
echo "原字串:${LDAP}"
#
echo "匹配"
echo "單個匹配:${LDAP/ldap/liwl}"
echo "全部匹配:${LDAP//ldap/liwl}"
#
echo -e "會把l到p之前的字元替換:\n替換前${LDAP}\n替換後${LDAP/l*p/liwl}"
#
echo "替換"
echo -e "單個替換:\n替換前${LDAP}\n替換後${LDAP/l??p/liwl}"
echo -e "全部替換:\n替換前${LDAP}\n替換後${LDAP//l??p/liwl}"
echo "刪除"
echo -e "刪除前${LDAP}\n刪除後${LDAP/l*p/}"
echo -e "刪除前${LDAP}\n刪除後${LDAP/l??p/}"
echo -e "刪除前${LDAP}\n刪除後${LDAP//l??p/}"

注意:

  • /#表示只在一行的開頭進行匹配
  • /%表示只在一行的末尾開始匹配
  • //匹配所有例項
  • ^^表示轉換為大寫
  • ,,表示轉換為小寫
  • *表示零或者多個
  • ?表示一個字元

6. 大小寫轉換

7. source載入變數

8. 函式定義

sh的規範:函式名(){...}

bash和ksh可接受規範:function 函式名{...}

僅bash接受規範:function 函式名(){...}

相關文章