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

shell脚本里的变量

2016-06-21 17:41 295 查看
http://blog.csdn.net/lhq9220/article/details/6450515

1     在命令行中和脚本 中,
 
变量定义得格式:
name=value             //=左右两边不能有空格,否则会当做命令来对待,输出一个command not found
echo $name             //echo 打印出变量,引用变量使用$name.
 
2         单引号和双引号 语法  和php中相同:
双引号仍然可以保有变量的内容,但单引号内仅能是一般字符,而不会有特殊符号。
 
如:
myname="$name is me"
echo $myname
 
Jack is me.
 
myname='$name is me'
echo $myname
 
$name is me
 
 
3           查看环境变量 ,MySQL和shell有类似的功能。
 
env             //查看环境变量
set              //查看局部变量和环境变量
 
export  $name       //将局部变量导入为环境变量。
 
 
4            交互式设置变量的值
 
read    [-pt]   name            //具体选项可查看帮助
:hello world                         //用户的输入
 
echo $name
hello world
 
declare [-aixr]    name                 //声明变量得类型
 
sum=100+300+50
echo $name
 
100+300+50
 
declare -i sum=100+50+30
echo $sum
 
180
 
 
5             引用 数组变量
 
就假设使用read得到的数组
read -p "input the Array"  arr
: hello world                              //用户输入
 
echo  $arr[0]
hello[0]               //输出错误,不能这样调用数组变量。
 
正确调用数组变量得方式 :
 
echo $(arr[1])           //小括号,让其接合起来。
 
顺便提及在${}                  //{}大括号中放置command ,${}将其返回值取出来。
 
 
 
6               引用${}对变量的操作 表:
 
file=/dir1/dir2/dir3/my.file.txt 

我们可以用 ${ } 分别替换获得不同的值: 

${file#*/}:从变量file的字符串左边开始,删除字符直到第一个“/”:dir1/dir2/dir3/my.file.txt 

${file##*/}:从变量file的字符串左边开始,删除字符直到最后一个“/”:my.file.txt 

${file#*.}:从变量file的字符串左边开始,删除字符直到第一个“.”:file.txt 

${file##*.}:从变量file的字符串左边开始,删除字符直到最后一个“.”:txt 

其实,在“#”后面,无非就是一个匹配问题(是linux中通用的通配符) ,不限于两个,你可以放任意个字符,还可以用shell中另外的通配符“?”“[…]”“[!…]”, 例如: 

$ echo ${file#????} 

1/dir2/dir3/my.file.txt 

$ echo ${file#*[0-9]} 

/dir2/dir3/my.file.txt 

$ echo ${file#/dir1/dir[0-9]} 

/dir3/my.file.txt

上面是从头往后匹配,下面分别是从后往前匹配 ,和替换:
 
至于“%”,和“#”不同的地方,就是从变量字串右部开始。 

${file%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“/” :/dir1/dir2/dir3 

${file%%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“/”:(空值) 

${file%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“.”:/dir1/dir2/dir3/my.file 

${file%%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“.”:/dir1/dir2/dir3/my
 
替换:
 
${变量/旧字符串/新字符串}       //只替换第一个匹配上的

${变量//旧字符串/新字符串}       //替换所有匹配上得,是

 
 
 
 
 
 
7               万用字符和特殊符号
 
 
符号内容
*万用字符,代表一个或多个字符(或数字)
?万用字符,代表一个字母
#批注,这个最常被使用在 script 当中,视为说明!
/跳脱符号,将『特殊字符或万用字符』还原成一般字符
|分隔两个管线命令的界定 ;
;连续性命令的界定(注意!与管线命令并不相同)
~使用者的家目录
$亦即是变量之前需要加的变量取代值
&将指令变成背景下工作
!逻辑运算意义上的『非』 not 的意思!
/路径分隔的符号
>, >>输出导向,分别是『取代』与『累加』
'单引号,不具有变量置换的功能
"具有变量置换的功能!
` `两个『 ` 』中间为可以先执行的指令!
(   )在中间为子 shell 的起始与结束
[  ]在中间为字符的组合
{   }在中间为命令区块的组合!
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: