shell脚本里的变量

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 的起始与结束
[  ]在中间为字符的组合
{   }在中间为命令区块的组合!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值