变量替换
- ${变量名#匹配规则}
从变量开头进行规则匹配,将符合最短的数据删除
例子
variable_1="I love you ,do you love me "
查看一下
var1= ${variable_1#*ove}
查看一下
- ${变量名##匹配规则}
从变量开头进行匹配,将符合最长的数据删除
variable_1="I love you ,do you love me "
查看一下
var1=${variable_1##*ove}
查看结果
-
${变量名%匹配规则}
从变量尾部进行规则匹配,将符合最短的数据删除
variable_1="I love you ,do you love me "
查看一下
var1=${variable_1%ov*}
-
${变量名%%匹配规则}
从变量尾部进行规则匹配,将符合最长的数据删除
variable_1="I love you ,do you love me "
查看一下
var1=${variable_1%%ov*}
查看一下
- ${变量名/旧字符串/新字符串}
变量内容符合旧字符串则,则第一个旧字符串会被新的字符串取代
${变量名//旧字符串/新字符串}
变量内容符合旧字符串则,则全部的旧字符串会被新字符串取代
变量测试
| 变量配置方式 | str没有配置 | Str没有配置 | Str已配置且非空 |
|---|---|---|---|
| var=${str-expr} | var =expr | var= | var=$str |
| var=${str:-expr} | var =expr | var=expr | var=$str |
| var=${str+expr} | var = | var=expr | var=expr |
| var=${str:+expr} | var =expr | var= | var=expr |
| var=${str=expr} | var =expr | var= | var=$str |
| var=${str:=expr} | var =expr | var=expr | var=$str |
字符串
- 计算字符串长度
方法一
方法二${#string}
例子:expr length $stringvar="Hello World" len=${#var} echo $len len1=`expr length "$var"` echo $len1
使用第二种方式要加·· 表示后面表达式的返回值,注意不是单引号哦,还有表达式中的引号再被计算字符串不存再空格的情况下可以不加。若存在空格则必须加不然会语法报错。
2. 获取字符索引位置
方法:
expr index "$string" substr
例子
var="quickstart is a app”
ind=`expr index "$string" start`
注意返回的是子串中最早出现的字符的位置,而不是字串的位置
- 获取子串的长度
方法:
expr match "$string" substr
例子
var=“quickstart is a app”
echo $var1
sub_len1=`expr match "$var" app`
sub_len2=`expr match "$var" quick`
sub_len3=`expr match "$var" quick.*`
其中sub_len1 显示0 ,sub_len2显示5, sub_len3 显示18.
因为expr match 是从开头开始匹配的
4.抽取字符串中的字串
方法一:
(1) ${string:position}
(2) ${string:position:length}
(3) ${string: -position} 或者 ${string:(position)}
(1)指定位置提取 (2) 指定位置指定长度(3)从后面提取长度
方法二:
expr substr $string $position $length
例子
var="spring springmvc springBoot springCloud"
substr_1=${var:10}
substr_2=${var:10:5}
substr_3=${var: -10}
substr_4=${var:(-10)}
substr_5=`expr substr "$var" 5 10 `
注意expr索引计数从1开始,使用${string:position},索引计数是从0开始计数的
substr_3 要注意-号前面要加空格
5. 命令替换
| 语法格式 | |
|---|---|
| 方法一 | ·command· |
| 方法二 | $(command) |
例子1
获取系统所得所有用户并输出
index=1
for user in `cat /etc/passwd | cut -d ":" -f 1`
do
echo "this is $index user : $user"
index=$(($index+1))
done
例子2
根据系统时间计算今年或明年
$((计算表达式)) 计算表达式中的变量可以加或不加$ 当然还存在((num++))这样的例子
echo "This is $((date +%Y))"
echo "This is $(($(date +%Y)+1))"
例子3
根据系统时间获取今年还剩下多少个星期,已经过了多少星期。
查看相关命令
man date
echo "This year have passed $(date +%j) day "
echo "This year have passed $(($(date +%j)/7)) week"
echo "There is $((365-$(date +%j))) days before new year"
echo "There is $(((365-$(date +%j))/7)) weeks before new year "
例子4
判断redis进程是否存在,若不存在则自动拉起该进程
redis_process_redis_num=$(ps -ef |grep redis |grep -v grep |wc -1)
if [$redis_process_redis_num -eq 0] ;then
systemctl start redis
fi
来源:CSDN
作者:赖在床上的小
链接:https://blog.csdn.net/qq_37618461/article/details/104536062