浏览 1739 次
锁定老帖子 主题:Bash编程入门(三)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-06-11
* 本节讲解内容:括号 * 本节使用的shell版本为: GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11) Copyright (C) 2007 Free Software Foundation, Inc. * 所有本节讲解的内容,都需要你自己动手操作才能明白其含义 * 本文中所用到的所有命令,使用如下格式: $ <some_command> <output result> () parentheses 小括号有多种功用,下面一一说明: * 封装命令输出 $ 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 [] brackets 中括号在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才是判断是否相等。 {} braces 大括号可用于重定向程序的输入输出: { printf a printf b printf c } > abc 上面的代码将会把大括号里的输出重定向输出到名为abc的文件中。执行上面的代码,获得abc文件: $ cat abc abc 使用上面生成的abc文件,做一个输入的例子: { while read line; do echo $line done } < abc 通过read命令,我们将abc文件中的内容读入并显示出来。 字串扩展 大括号可用于字串的扩展: $ echo {a,b,c} a b c $ echo {1..3} 1 2 3 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |