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

shell脚本中的变量

2011-05-27 16:46 197 查看
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 的起始与结束
[ ]
在中间为字符的组合
{ }
在中间为命令区块的组合!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: