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

posted @ 2024-10-07 13:13  liwl1991  阅读(4)  评论(0编辑  收藏  举报