bash的特有扩展属性
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 函数名(){...}