您的位置:首页 > 运维架构 > Shell

BASH变量测试和样式对比

2012-10-02 21:15 246 查看
unset myname
r=${myname-'Basher'}
echo $r

结果为Basher


测试存在与否

myname=
r=${myname:-'Basher'}
echo $r

结果为Basher


变量不存在或其值为空,传回默认值

unset conut
r=${count:=100}
echo $count

结果100


变量不存在或为空,赋一个默认值给变量

fn=${1:?'error!please remove the dir'}

没有传参,则打印错误信息


变量不存在或为空,打印提示信息

IamHappy='Feel so good'
r=${IamHappy:+"$@"}
echo $r

结果为所有传递的参数


变量存在,则返回一个值

myname="sheller man"
substr=${myname:4}
echo $substr

显示ler man

#vi test.bash
#!/bin/bash
echo $0
echo ${@:1}

#./test.bash aa bb cc dd
aa bb cc dd
将${@:1}改为${@:2}时,结果为:
bb cc dd
显示指定参数数字之后的参数
将${@:2}改为${@:2:2},结果为:
bb cc
显示指定参数数字之后的参数个数 


截取字符串

filename="/usr/sbin/ntpdate"
echo ${$filename}
结果:17
echo ${#数组[@]} 取得数组元素的个数


计算字符串长度

===========

TEST="/usr/bin/date"
echo ${TEST#/*/}
由前面对比,删最短的,结果:bin/date


TEST="/usr/bin/date"
echo ${TEST##/*/}
由前面对比,删最长的,结果:date


TEST="/usr/bin/date"
echo ${TEST%/*}
由字符串后面对比,删除最短的,结果:/usr/bin


TEST="www.test.com.cn"
echo ${TEST%%.*}
由后面对比,删最长的,结果:www


TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
R=${TEST/:/,}
echo $R
只替换第一个对比符合的字符串,结果:mail,x:8:8:mail:/var/mail:/bin/sh


TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
R=${TEST//:/,}
echo $R
替换全部对比符合的字符串,结果为:mail,x,8,8,mail,/var/mail,/bin/sh


TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
R=${TEST/:/}
echo $R
删除第一个符合样式的字符串,结果:mailx:8:8:mail:/var/mail:/bin/sh


TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
R=${TEST//:/}
echo $R
删除所有符合的,结果:mailx88mail/var/mail/bin/sh


str="yes, This is a TITLE."
r=${str/#T* /}
echo $r
行2要对比的是:位置在句首,T字符后接的任意长度的字符,最后以空格符结尾的字符串,因$str中无此样式,所以,整个str变量值原封不动的传回给r。
如果把行2样式改为${str/T* /},表示样式不一定要位于句首,那么就符合了条件,对比到的字符串是This is a,删除后,r的值为yes,TITLE。


==========

取得数组索引列表:

TEST=(a b c d e f)
for i in "${!TEST[@]}"
do
echo "$i: ${TEST[$i]}"
done
运行结果:
0: a
1: b
2: c
3: d
4: e
5: f


命令替换:

tmp=$(ifconfig eth0 | grep 'inet addr')
r=${tmp/inet addr:/}#取出匹配字符之后的内容
ip=${r/ Bcast*/}  #删除变量r中匹配字符内容
echo $ip
显示 ip地址


========

算数运算:

I=$((1+2))
echo $I
得到3,如果不加括号,则只能得到“1+2”
有多种方法实现:
$r=`expr 1+2`
$r=[1+2]
let $r=1+2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: