首页 > 其他 > 详细

shell变量扩展技巧

时间:2014-03-20 17:47:57      阅读:358      评论:0      收藏:0      [点我收藏+]

SHELL中有一些变量扩展的技巧,做下归纳总结

1、取字符串slice
规则一:${变量名:位置起点}
含义:由指定的位置起点开始,截取子字符串到字符串结束
例如:

bubuko.com,布布扣
var="/etc/passwd"
A=${var:5}
echo $A
bubuko.com,布布扣
bubuko.com,布布扣
passwd
bubuko.com,布布扣

 

规则二:${变量名:位置起点:长度}
含义:由指定的位置起点开始,截取指定长度的字符串
例如:

bubuko.com,布布扣
var="/etc/passwd"
A=${var:1:3}
echo $A

etc
bubuko.com,布布扣

注意:位置起点是从0开始起算的。

例如:

bubuko.com,布布扣
var="/etc/passwd"
A=${var:0:4}
echo $A

/etc
bubuko.com,布布扣

 

2、取部分位置参数
命令行参数:$0表示命令本身,$1表示第一个参数,$2表示第二个参数,依此类推,$@表示所有的参数
位置参数有:$0、$1、$2、$@
规则一:${@:起点}
含义:表示由起点开始,取得后面所有的位置参数
例如:position.sh

bubuko.com,布布扣
#!/bin/bash
#显示命令本身
echo $0
echo ${@:1}

#执行:

chmod  +x  position.sh
./position.sh  1 2 3 4 5 

#结果:

./position.sh
1 2 3 4 5
bubuko.com,布布扣

规则二:${@:起点:个数}

含义:表示由起点开始,取得指定个数的位置参数
例如:position2.sh

bubuko.com,布布扣
#!/bin/bash
echo ${@:3:2}
chmod +x position2.sh ./position2.sh 1 2 3 4 5 34
bubuko.com,布布扣

 

3、计算字符串长度
规则:${#变量名称}
含义:表示返回变量名称的字符串长度
例如:

bubuko.com,布布扣
string="/etc"
echo ${#string}

#执行结果:

4
bubuko.com,布布扣

 


4、对比样式
规则一:${变量#样式}
含义:表示由变量值的最左边开始与样式进行对比,删除"最短相符合的字符串"
例一:

bubuko.com,布布扣
string="/etc/sysconfig/syslog"
echo ${string#/*/}


#执行结果:

sysconfig/syslog
bubuko.com,布布扣

例二:

bubuko.com,布布扣
string="//etc/sysconfig/syslog"
echo ${string#/*/}

#执行结果:

etc/sysconfig/syslog
bubuko.com,布布扣

 

说明:样式/*/,表示一对斜线之间有字符串(含空字符串),就对比符合

规则二:${变量##样式}
含义:表示由变量值的最左边开始与样式进行对比,删除"最长相符合的字符串"
例:

bubuko.com,布布扣
string="/etc/sysconfig/syslog"
echo ${string##/*/}

#执行结果:

syslog
bubuko.com,布布扣

 

规则三:${变量%样式}
含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最短相符的字符串"
例:

bubuko.com,布布扣
string="/etc/sysconfig/syslog"
echo ${string%/*}

#执行结果:

/etc/sysconfig
bubuko.com,布布扣

 

规则四:${变量%%样式}
含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最长相符的字符串"
例一:

bubuko.com,布布扣
string="www.baidu.com"
echo ${string%%.*}

#执行结果:

www
bubuko.com,布布扣

 

4、替换或删除部分字符串
规则一:${变量/样式/替换字符串}
含义:如果变量中有符合样式的字符串,则使用替换字符串替代,只替换第一个符合样式的字符串
例:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string/:/,}

#执行结果:

ftp,x:14:50:FTPUser:/var/ftp:/sbin/nologin
bubuko.com,布布扣

 

规则二:${变量//样式/替换字符串}
含义:如果变量中有符合样式的字符串,则使用替换字符串替代,替换全部符合样式的字符串
例如:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string//:/,}

#执行结果:

ftp,x,14,50,FTPUser,/var/ftp,/sbin/nologin
bubuko.com,布布扣

 

5、把符合样式的字符串删除
规则一:${变量/样式/}
含义:删除符合样式的第一个字符串
例:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string/:/}

#执行结果:

ftpx:14:50:FTPUser:/var/ftp:/sbin/nologin
bubuko.com,布布扣

 

规则二:${变量//样式/}
含义:删除符合样式的所有字符串
例:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string//:/}

#执行结果:

ftpx1450FTPUser/var/ftp/sbin/nologin
bubuko.com,布布扣

 

6、要求样式在字符串开始或结尾
在对比样式时,在样式前加上"#"号,表示该样式要出现在变量值的开头才算符合
在对比样式时,在样式前加上"%"号,表示该样式要出现在变量值的结尾才算符合
例一:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string/#ftp/}

#执行结果:

:x:14:50:FTPUser:/var/ftp:/sbin/nologin
bubuko.com,布布扣

例二:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string/#:/}
bubuko.com,布布扣

执行结果:是个空值,没有在字符串开头找到":"冒号

例三:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string/%nologin/bash}

#执行结果:

ftp:x:14:50:FTPUser:/var/ftp:/sbin/bash
bubuko.com,布布扣

例四:

bubuko.com,布布扣
string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
echo ${string/%sbin/bin}
bubuko.com,布布扣

执行结果:是个空值,没有在变量值结尾找到匹配的样式


7、取变量名称列表
规则:${!开头字符串@}${!开头字符串*}
含义:把所有以指定字符串开头的变量名列出,各变量之间按空格分开
例:

bubuko.com,布布扣
syslog="syslog"
dir="/etc/sysconfig/"
dirfile="$dir/$syslog"
echo ${!di@}

#执行结果:

dir  dirfile
bubuko.com,布布扣

 


8、取数组索引列表
规则:${!数组变量[@]}${!数组变量[*]}
含义:把数组变量所有的索引列出,各索引值之间用空格符分开
例一:

bubuko.com,布布扣
filelist=(/etc/passwd  /etc/issue  /etc/sysconfig/syslog)
echo ${!filelist[@]}

#执行结果:

01 2
bubuko.com,布布扣

 

例二:

bubuko.com,布布扣
filelist=(/etc/passwd  /etc/issue  /etc/sysconfig/syslog)
for  index  in ${!filelist[@]}
do 
       echo "index  $index:${filelist[$index]}"
done

#执行结果:

index  0:/etc/passwd
index  1:/etc/issue
index  2:/etc/sysconfig/syslog
bubuko.com,布布扣

shell变量扩展技巧,布布扣,bubuko.com

shell变量扩展技巧

原文:http://www.cnblogs.com/nigang/p/3613209.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!