Shell变量的用法

南笙酒味 提交于 2020-02-28 19:08:32

变量替换

  1. ${变量名#匹配规则}

从变量开头进行规则匹配,将符合最短的数据删除
例子

variable_1="I love you ,do you love me "

查看一下
在这里插入图片描述

var1= ${variable_1#*ove}

查看一下
在这里插入图片描述

  1. ${变量名##匹配规则}
    从变量开头进行匹配,将符合最长的数据删除
variable_1="I love you ,do you love me "

查看一下
在这里插入图片描述

var1=${variable_1##*ove}

查看结果
在这里插入图片描述

  1. ${变量名%匹配规则}

    从变量尾部进行规则匹配,将符合最短的数据删除

variable_1="I love you ,do you love me "

查看一下
在这里插入图片描述

var1=${variable_1%ov*}

在这里插入图片描述

  1. ${变量名%%匹配规则}

    从变量尾部进行规则匹配,将符合最长的数据删除

variable_1="I love you ,do you love me "

查看一下
在这里插入图片描述

var1=${variable_1%%ov*}

查看一下
在这里插入图片描述

  1. ${变量名/旧字符串/新字符串}
    变量内容符合旧字符串则,则第一个旧字符串会被新的字符串取代
    在这里插入图片描述
    ${变量名//旧字符串/新字符串}
    变量内容符合旧字符串则,则全部的旧字符串会被新字符串取代
    在这里插入图片描述

变量测试

变量配置方式 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

字符串

  1. 计算字符串长度
    方法一
    ${#string}
    
    方法二
    expr length $string 
    
    例子:
    var="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`
注意返回的是子串中最早出现的字符的位置,而不是字串的位置
  1. 获取子串的长度
    方法:
 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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!