【Linux Shell脚本编程】变量子串与扩展变量

TangLu 未命名 2022-04-01 7454 0

一、Shell变量子串

常用来截取变量中的字符串内容,比如变量的实际值为一串FQDN地址,需要通过子串截取主机名部分的内容。在进行截取时可以通过指定内容截取,也可以指定索引下标进行截取。下面是一些Shell变量子串常用方法

1、获取变量长度

name=tanglu
echo ${#name}    #输出结果为6


2、删除与替换变量的值,匹配内容支持通配符(不会修改原有变量)

${变量名#匹配内容}        #从变量开头进行匹配,将符合最短的数据删除
${变量名##匹配内容}        #从变量开头进行匹配,将符合最长的数据删除,就是说会尽可能的删除多个被匹配到的内容,属于贪婪模式
${变量名%匹配内容}        #从变量结尾进行匹配,将符合最短的数据删除
${变量名%%匹配内容}        #从变量结尾进行匹配,将符合最长的数据删除,属于贪婪模式

variable1="i love you,do you love me'
variable2=${variable1#*ov}   #输出内容为e you,do you love me
variable2=${variable1##*ov}  #输出内容为e me
variable3=${variable1%*ov}   #输出内容为i love you,do you l
variable3=${variable1%%*ov}  #输出内容为i l

url=www.linuxe.cn
echo ${#url}        #获得变量长度
echo ${url#www.}    #井号代表从变量起始位置开始往后删除所指定的内容,支持通配符
echo ${url#*xe}     #星号作为统配符将变量中第一个xe前面的内容删除
echo ${url##*xe}    #两个井号的话会进行贪婪匹配,匹配到变量中最后一个xe结尾的地方为止
echo ${url%.cn}     #百分号是从变量尾部开始往前删除    
echo ${url%%.*}     #从尾部开始,贪婪匹配
echo ${url:0:5}     #从变量第一个字符开始切片,直到第五个字符
echo ${url:5:5}     #从变量第五个字符开始切片,再往后取五个字符
echo ${url:5}       #从第五个字符开始切,直到结尾

url=www.linuxe.cn
echo ${url/linuxe/LINUXE}  #使用方法和vi与sed中文本替换一样,同样也支持贪婪匹配
echo ${url//linuxe/LINUXE}   #替换所有的linuxe为LINUXE


2.png


3、Shell变量的切片操作

切片操作可以用来灵活的获取变量指定位置的内容

website="www.linuxe.cn"
echo ${website:4}   #从4个索引开始切片,输出为linuxe.cn
echo ${website:4:6}  #从第4个索引开始切片,只取6个,输出linuxe
echo ${website:-5}   #从尾部切片
echo ${website:-5:2}

企业微信截图_20220401122354.png


二、Shell特殊扩展变量

常用于判断变量是否赋值,避免影响系统中已经定义过的变量

result=${parameter:-word}  #如果变量parameter值为空,就返回word字符,这里将word赋值给了result变量
result=${parameter:=word}  #如果变量parameter值为空,使用word字符替代变量值,这里将word赋值给了result变量
result=${parameter:?word}  #如果变量parameter值为空,将word字符替作为错误输出,可以用于设置变量为空导致错误时的提示信息
result=${parameter:+word}  #如果变量parameter值为空,不做任何操作,否则返回word字符串,这里将word赋值给了result变量


1、对未定义的变量进行内容的替换,可以用来给变量设置默认值

unset var1          #删除var1变量
echo ${var1:-test}    #输出内容为test

var2=hello   
echo ${var2:-test}    #输出内容为hello

var3=    
echo ${var3-test}    #输出内容是空值


2、对未定义的变量或其值为空的变量进行内容的替换

unset var1             #删除var1变量
echo ${var1:-test}   #输出内容将会是test

var2=hello          #var2已经定义了内容
echo ${var2:-test}   #输出内容仍然是hello

var3=    #定义var3变量为空
echo ${var3:-test}    #输出内容是test

评论