(Gento)Bash示例,第二部分.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
声明: 本文的原始版本最初发表于IBM developerWorks,现在所有权归属Westtech Information Services。本文档是原始文档的更新版本,包含了Gentoo Linux文档团队所做的很多改进。 现在无人积极维护本文档。 Bash示例,第二部分 内容: 1.? 更多bash编程基础 接收参数 让我们从一个操作命令行参数的基本技巧开始,然后再看bash的基本编程结构。 在前面的 HYPERLINK /doc/zh_cn/articles/bash-by-example-p1.xml 介绍性的文章的示例程序中。我们使用了环境变量“$1”,他引用第一个命令行参数。类似的,你可以使用“$2”,“$3”等等来引用传入你的脚本中的第二个和第三个参数。下面是一个例子: 代码?1.1: 引用传入脚本的参数 #!/usr/bin/env/bash echo name of script is $0 echo first argument is $1 echo second argumeng is $2 echo seventeenth argument is $17 echo number of argument is $# 这个例子有两个,,,,的细节需要解释。第一,“$0”将扩展成从命令行调用的脚本的名称,而“$#”则将扩展成传入脚本的参数的数量。试验上面的脚本,并通过传入不同类型的命令行参数理解它是怎样工作的。 有时候一次引用所有的命令行参数是很有用的。为了达到此目的,bash实现了“$@”变量,它扩展了所有用空格隔开的命令行参数。我们在稍后的“for”循环中,我们将看到使用它的例子。 Bash编程结构 如果你曾用过诸如C,Pascal,Python或Perl过程语言编程,那么你对像“if”语句,“for”循环和此类的标准的编程结构应该比较熟悉。 对于大多数这些标准结构,Bash也有自己的版本。在下面的几段中,我将介绍一些bash结构并演示这些结构与它们在其他你所熟知的编程语言中的不同之 处。 方便的条件语句 如果你用C语言编写过文件相关的代码,你应该知道比较一个特定的文件是否比另一个要新通常要花费很大气力。这是因为C语言没有用来执行这种比较的内建语 法;那么两个stat()的调用和两个stat结构体就应该用来手工执行这种比较了。相反,bash有标准的内建文件比较操作符,所以确定“/tmp/myfile是否可读”和判断“$myvar是否大于4”一样容易。 下表中列出了大多数常用的bash比较操作符。你将还可以找到如何正确使用每一个选项的例子。例子要紧跟在“if”语句后面。例如: 代码?1.2: Bash比较操作符 if [ -z $myvar ] then echo myvar is not defined fi 有时一种特定的比较操作可以有很多不同的方法来实现。例如,下面的两段代码实现了同样的功能: 代码?1.3: 进行比较的两种方法 if [ $myvar -eq 3 ] then echo myvar equals 3 fi if [ $myvar = 3 ] then echo $myvar = 3 ] then echo myvar equals 3 fi 上面两个比较做了同样的事情,但是第一个使用了算术比较操作符,然而第二个则使用了字符串比较操作符。 字符串比较说明 大多数时候你可以不使用括起字符串和字符串变量的双引号,但这并非是个好主意。为什么呢?因为你的环境变量刚好有个空格或制表符在里面,这时bash将不能区分。从而导致代码运行异常。这里是一个糟糕的比较的例子。 代码?1.4: 糟糕的比较的例子 if [ $myvar = foo bar oni ] then echo yes fi 在上面的例子中,如果myvar等于“foo”,代码将正常运行而且不会打印出任何东西。然而,如果myvar等于“foo bar oni”,代码将出错并返回以下错误: 代码?1.5: 变量包含空格导致的错误 [: too many arguments 在这种情况下,“$myvar”(等于“foo bar oni”)中的空格使bash混淆了。在bash扩展了“$myvar”之后,这个比较变成了: 代码?1.6: 最终的比较 [ foo bar oni = foo bar oni 因为环境变量没有放在双引号中,bash认为你方括号中参数太多。你可以通过用双引号将字符串参数括起来轻松的解决这个问题。记住,如果你习惯于在所有的字符参数和环境变量都用双引号括起来,你将能解决很多类似的编程错误。“foo bar oni”比较应该这样些: 代

文档评论(0)

baa89089 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档