- 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 认为你方括号中参数太多。你可以通过用双引号将字符串参数括起来轻松的解决这个问题。记住,如果你习惯于在所有的字
您可能关注的文档
- 2020教师师德培训总结.docx
- 2021年pep小升初英语模拟测试题.docx
- 02197概率论与数理统计重点复习资料.docx
- 06001惠港酒店发文格式.docx
- 06005 统一打卡通知.docx
- 06092工作分析八套试卷 答案.docx
- 10000汉字起笔部首表.docx
- 11000地形测量技术设计.docx
- 20000字起笔部首检字表.docx
- 20148小继教培训心得体会.docx
- 中国国家标准 GB/Z 37551.300-2026海洋能 波浪能、潮流能及其他水流能转换装置 第300部分:河流能转换装置发电性能评估.pdf
- GB/T 44937.3-2025集成电路 电磁发射测量 第3部分:辐射发射测量 表面扫描法.pdf
- 中国国家标准 GB/T 44937.3-2025集成电路 电磁发射测量 第3部分:辐射发射测量 表面扫描法.pdf
- 《GB/T 44937.3-2025集成电路 电磁发射测量 第3部分:辐射发射测量 表面扫描法》.pdf
- 中国国家标准 GB/T 44937.1-2025集成电路 电磁发射测量 第1部分:通用条件和定义.pdf
- GB/T 44937.1-2025集成电路 电磁发射测量 第1部分:通用条件和定义.pdf
- 《GB/T 44937.1-2025集成电路 电磁发射测量 第1部分:通用条件和定义》.pdf
- 中国国家标准 GB/T 4937.37-2025半导体器件 机械和气候试验方法 第37部分:采用加速度计的板级跌落试验方法.pdf
- 《GB/T 4937.10-2025半导体器件 机械和气候试验方法 第10部分:机械冲击 器件和组件》.pdf
- 中国国家标准 GB/T 44937.2-2025集成电路 电磁发射测量 第2部分:辐射发射测量TEM小室和宽带TEM小室法.pdf
原创力文档

文档评论(0)