Bash编程入门(三)

Shell编程很有趣,Shell编程很复杂,Shell编程离我们很近又似乎很远:使用Linux离不开它,但似乎又不曾仔细了解它。这套文章的目的是带你走进Shell编程的大门 ,领略它的丰富多彩。

* 本节讲解内容:括号

* 本节使用的shell版本为:


GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.


* 所有本节讲解的内容,都需要你自己动手操作才能明白其含义

* 本文中所用到的所有命令,使用如下格式:


$ <some_command>
<output result>


[b]() parentheses[/b]

小括号有多种功用,下面一一说明:

* 封装命令输出


$ echo $(pwd)
/Users/liweinan


在Bash下面,也可以用反引号:


$ echo `pwd`
/Users/liweinan


但是使用括号的好处是可以嵌套:


$ echo $(ls $(pwd))
Desktop Documents Downloads Games Library Movies Music Pictures Public Sites


* 开启一个Sub-Shell

举个例子,假设有下面这段代码:


name=abc

printf "name is %s\n" $name


程序输出如下:


name is abc


如果我们这样:


(
name=abc
)

printf "name is %s\n" $name


程序输出:


name is


可以看到,括号里面的代码,和括号外面的代码,在不同的Shell环境当中。即:

* 括号开启了一个Sub-Shell

[b][] brackets[/b]

中括号在Shell中的用处如下:

* 正则表达式匹配

例子:


ls -1 Xee.[jp][pn]g
Xee.jng
Xee.jpg
Xee.png
Xee.ppg


* 判断操作符

这个是方括号在Shell中的主要功能,结合一些参数,形成判断条件,比如:


str=a

if [ -n $str ]; then
echo "str exists"
else
echo "str not exists"
fi


运行上面的脚本,输出如下:


str exists


-n 用来判断$str是否不为空,相当于!=null,方括号里面支持很多这种判断命令,比如:


[ -z $str ]


代表判断$str是否为空,相当于==null。

注意Shell中判断相等用的是=,而不是两个等号==:


[ $str1 = $str2 ]


通过上面学到的知识,试试看猜猜下面这个例子的运行结果:


str1=a
str2=b

if [ str1=str2 ]; then
echo "str1=str2"
fi

if [ $str1=$str2 ]; then
echo "$str1=$str2"
fi

if [ $str1 = $str2 ]; then
echo "$str1 = $str2"
fi


我们赋值str1为'a',str2为'b',然后下面的三段,看起来条件应该都不成立,于是没有输出,实际上是这样吗?运行上面的脚本,结果如下:


str1=str2
a=b


这是怎么回事?我们一个一个来看:


if [ str1=str2 ]; then
echo "str1=str2"
fi


在这里,str1实际上是一个字串'str1',而并不是str1这个变量,引用变量要用$。因此,方括号里面的代码含义为:'str1'='str2',将str2这个字串赋值给str1,虽然这没有什么意义, 但是它可以正常执行,因此if判断为真,代码被执行了。

接下来看第二、三段,它们唯一的区别是等号两边有没有空格:


...
if [ $str1=$str2 ]; then
...
if [ $str1 = $str2 ]; then
...


* 在shell中,等号两边的空格很重要。

$str1=$str2的含义是将$str2的值赋给$str1,$str1 = $str2才是判断是否相等。

[b]{} braces[/b]

大括号可用于重定向程序的输入输出:


{
printf a
printf b
printf c
} > abc


上面的代码将会把大括号里的输出重定向输出到名为abc的文件中。执行上面的代码,获得abc文件:


$ cat abc
abc


使用上面生成的abc文件,做一个输入的例子:


{ while read line; do
echo $line
done
} < abc


通过read命令,我们将abc文件中的内容读入并显示出来。

[b]字串扩展[/b]

大括号可用于字串的扩展:


$ echo {a,b,c}
a b c



$ echo {1..3}
1 2 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值