Bash示例第二部分.docxVIP

  • 0
  • 0
  • 约8.15千字
  • 约 10页
  • 2023-04-24 发布于上海
  • 举报
声明: 声明: 本文的原始版本最初发表于IBM developerWorks,现在所有权归属 Westtech Information Services。本文档是原始文档的更新版本, 包含了 Gentoo Linux 文档团队所做的很多改进。 现在无人积极维护本文档。 Bash 示例,第二部分 内容: 更多 bash 编程基础接收参数 让我们从一个操作命令行参数的基本技巧开始,然后再看 bash 的基本编程结构。 在前面的介绍性的文章的示例程序中。我们使用了环境变量“$1”,他引用第一个命令行参数。类似的,你可以使用“$2”,“$3”等等来引用传入你的脚本中的第二个和第三个参数。下面是一个例子: 代码 1.1: 引用传入脚本的参数 代码 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 比较操作符 代码 1.2: Bash 比较操作符 if [ -z $myvar ] then echo myvar is not defined fi 有时一种特定的比较操作可以有很多不同的方法来实现。例如,下面的两段代码实现了同样的功能: 代码 1.3: 进行比较的两种方法 代码 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: 糟糕的比较的例子 代码 1.4: 糟糕的比较的例子 if [ $myvar = foo bar oni ] then echo yes echo yes fi 在上面的例子中,如果 myvar 等于“foo”,代码将正常运行而且不会打印出任何东西。然而,如果 myvar 等于“foo bar oni”,代码将出错并返回以下错误: 代码 1.5: 变量包含空格导致的错误 代码 1.5: 变量包含空格导致的错误 [: too many arguments 在这种情况下,“$myvar”(等于“foo bar oni”)中的空格使 bash 混淆了。在 bash 扩展了“$myvar”之后,这个比较变成了: 代码 1.6: 最终的比较 代码 1.6: 最终的比较 [ foo bar oni = foo bar oni 因为环境变量没有放在双引号中,bash 认为你方括号中参数太多。你可以通过用双引号将字符串参数括起来轻松的解决这个问题。记住,如果你习惯于在所有的字

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档