现在的位置: 首页 > 综合 > 正文

shell脚本中的变量

2013年01月10日 ⁄ 综合 ⁄ 共 2114字 ⁄ 字号 评论关闭

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

 

 

 

 

 

 

抱歉!评论已关闭.