一、变量的替换

(1)匹配并删除

${变量#匹配规则} :从头开始匹配,最短删除

${变量##匹配规则}:从头开始匹配,最长删除

【Shell脚本】变量的高级用法_第1张图片

${变量%匹配规则}:从尾开始匹配,最短删除

${变量%%匹配规则}:从尾开始匹配,最长删除

【Shell脚本】变量的高级用法_第2张图片

${变量/旧字符串/新字符串}: 替换字符串,最短替换

${变量//旧字符串/新字符串} :替换字符串,全部替换

【Shell脚本】变量的高级用法_第3张图片


二、字符串的处理

(1)计算字符串的长度

方法一:${#str}

方法二:expr length "$str"  说明:str有空格的话必须加双引号

image.png

(2)获取字符在字符串中索引位置(拆分子串字符中一个个匹配,找到即返回)

expr index "$str" substr

image.png

(3)计算子串长度(从头开始匹配才能找到)

expr match "$string" substr

【Shell脚本】变量的高级用法_第4张图片

(4)抽取子串

方法一:${str:position} 从str中的position开始 (索引下标从0开始)

image.png

方法二:${str:position:length} 从positon开始,匹配长度为length

image.png

方法三:${str: -position}从右边开始(负号前面有空格)

image.png

方法四:expr substr "$str" position length 从positon开始,匹配长度为length (索引下标从1开始)

image.png


三、命令替换

方法一:`command`

方法二:$(command)

【Shell脚本】变量的高级用法_第5张图片

$(())用来算数运算,比如$((20+1))、$(($num++))

image.png


四、有类型变量

declare和typeset:定义变量类型

-r:只读

-i:设为整数

-a:定义为数组

-f:显示此脚本前定义过的所有函数及内容

-F:仅显示此脚本前定义过的函数名

-x:将变量声明为环境变量

image.png

【Shell脚本】变量的高级用法_第6张图片

定义数组后,扩展相关操作

输出数组内容echo ${array[0]};

输出整个数组echo ${array[@]};

获取数组长度echo ${#array[@]};

给数组某个下标赋值:array[0]="hello";

删除元素:unset array[0];

清空整个数组:unset array

数组遍历:

    for v in ${array[@]}

    do

        echo $v

    done

【Shell脚本】变量的高级用法_第7张图片


五、数学运算expr用法

方法一:expr $num1 operator $num2

方法二:$(($num1 operator $num2))

expr 操作符对照:此处留意操作符前后必须有空格

num1 | num2:num1不为空且非0返回num1,否则返回num2

num1 & num2:num1不为空且非0返回num1,否则返回0

num1 < num2:num1小于num2,返回1;否则返回0

num1 = num2:num1等于num2返回1;否则返回0

【Shell脚本】变量的高级用法_第8张图片

练习:让用户输入一个正整数,如果是正整数则输出1+2+..m的值,否则继续让用户输入正整数

【Shell脚本】变量的高级用法_第9张图片


六、浮点运算之bc

bc是bash内建运算器,支持浮点数运算。上面expr只支持整数运算。

image.png


七、扩展练习

$$ 是脚本运行的当前进程ID号

$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

grep -v 排除某些字段命令

下面是一个守护进程的脚本:

【Shell脚本】变量的高级用法_第10张图片