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 函式名(){...}