linux 两个变量的值,Linux shell编程(二)高级变量

高级变量,有3个主题:

(1)变量扩展         ${变量名称}    $(filename)

(2)命令替换         ${命令}            $(ls /)

(3)算术扩展         $((算术式))       $((9+9))

1. 测试变量“存在于否”的基本用法

语法:${待测变量-默认值}

用例:

unset myname

r=${myname-'basher'}

echo $r

结果为:basher

2. 测试变量“不存在”或其值为空:“传回”一个默认值

语法:${待测变量:-默认值}

用例:

myname=

r=${myname:-'basher'}

echo $r

结果为:basher

特殊运用法

[ -n ${DEBUG:-} ] && set -v

[  ]是测试条件的语法,其中-n是用来测试后接的变量是否有值,若非空,则传回真值。

${DEBUG:-}就是-n要测试的对象。:-后面原本放置默认值的地方却没有任何东西,表示故意要让默认值为空。

3.测试变量“不存在”或其值为空:给变量设一个默认值

语法:${待测变量:=默认值}

用例:

unset count

r=${count:=100}

echo $count

结果为:100

用例2:

count=500

r=${count:=100}

echo $r

结果为:500

目的:给变量设一个默认值

4.测试变量是否“不存在”或其值为空:提示错误信息

语法:${待测变量:?提示信息}

5.测试变量的“存在性”

语法:${待测变量:+真值}

用例:

Iamhappy='feel so good'

r=${Iamhappy:+'true'}

echo $r

结果为:true

目的:用来测试某件事是真的。

6.变量的扩展:取字符串切片,字符串长度

(1)取字符串切片

语法一:${变量:位置起点}

用例:

myname="sheller name"

substr=${myname:4}

结果为:ler name

语法二:${变量:位置起点:长度}

用例:

filename="/etc/apache2"

dir1=${filename:1:3}

echo $dir1

结果为etc

7.计算字符串长度

语法:${#变量名称}

用例:

filename="/usr/sbin/ntpdate"

echo ${#filename}

结果为:17

8.变量扩展:对比样式

由字符串前面对比,删除相符者

语法:${变量#样式}

用例1:

filename="/usr/sbin/ntpdate"

r=${filename#/*/}

echo $r

结果为:sbin/ntpdate

用例2:

filename="//usr/sbin/ntpdate"

r=${filename#/*/}

echo $r

结果为:usr/sbin/ntpdate

由前面对比,删最长的

语法:${变量##样式}

用例:

filename="/usr/sbin/ntpdate"

r=${filename##/*/}

echo $r

结果为:ntpdate

由后面对比,删最短的

语法:${变量%样式}

用例:

filename="/usr/sbin/ntpdate"

r=${filename%/*}

echo $r

结果为 /usr/sbin

由后面对比,删最长的

语法:${变量%%样式}

用例:

m=${fqdn%%.*}

echo $m

结果为www

总结:#经常放在数字前面表示个数,就记住它是由前面对比。一个#删最短,两个#删最长。

%经常放在数字后面代表百分比,所以看到它,就记着它是由后面对比。一个%删最短,两个%%删最长。

9.只替换第一个对比符合的字符串

语法:${变量/样式/替换字符串}

用例:把:换成,

act="mail:x:8:8:mail:/var/mail"

r=${act/:/,}

echo $r

结果为:mail,x:8:8:mail:/var/mail

10.替换全部对比符合的字符串

语法:${变量//样式/替换字符串}

把;换成,

act="mail:x:8:8:mail:/var/mail"

r=${act//:/,}

echo r$

结果为:mail,x,8,8,mai,/var/mail

11.把对比符合的字符串删除

只删一个

语法:${变量/样式/}

用例:把第一个:删除

act="mail:x:x:8:8:mail:/var/mail"

r=${act/:/}

echo r$

结果为:mailx:x:8:8:mail:/var/mail

删除全部

语法:${变量//样式/}

把所有的:删除

用例:

act="mail:x:8:8:mail:/var/mail"

r=${act//:/}

echo r$

结果为:mailx88mail/var/mail

12.变量扩展:取变量名称列表、数组索引列表

取变量名称列表

语法:${!开头字符串@}或${!开头字符串*}

用例:

filename="ntpdate"

dir="/usr/sbin"

dir_file="$dir/$filename"

echo ${!di@}

结果为:dir dir_file

取数组索引列表

语法:${!数组变量[@]}或{!数组变量[*]}

用例:

ar=(a b c xy z)

r=${!ar[@]}

echo r$

结果为:0 1 2 3 4

用例:

ar=(a b c xy z)

for i in "${!ar[@]}"

do

echo "index $i: ${ar[$i]}"

执行结果为:index 0: a

index 1: b

................

13.命令替换

命令替换的语法是:变量名称=$(命令)

用例:

DIRS=$(ls)

for f in $DIRS

do

echo $f

done

$DIRS里的文件名,轮替放入$f,然后由行4显示出来

14.算术扩展

算术扩展的语法:$((算术式))

用例:

I=$((8+16))

echo $I

结果显示为:24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值