北京数据恢复 北京 深圳数据恢复 深圳 上海数据恢复 上海 成都数据恢复 成都 重庆数据恢复 重庆 浙江数据恢复 浙江 沈阳数据恢复 沈阳 福建数据恢复 福建 昆明数据恢复 昆明 天津数据恢复 天津
北亚数据恢复中心
网站首页
Index
公司概况
Company
公司动态
Dynamic
服务项目
Service
成功案例
Case
服务报价
Price
技术专区
Technical
联系我们
Contacts
服务网点
Alliance
技术论坛
BBS
 
文 章 导 航
数据恢复技术文章
硬盘维修技术文章
  您现在的位置是:首页>>技术专区>>数据恢复文章>>正文
 
Linux 技巧: Bash 测试和比较函数

作者:  来源: 日期:2007-4-5 15:53:46 点击:


0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || a -gt 2 ]]; echo $?
-bash: a: unbound variable

 


条件测试

虽然使用以上的测试和 &&、 || 控制操作符能实现许多编程,但 bash 还包含了更熟悉的 “if, then,

else” 和 case 结构。学习完这些之后,将学习循环结构,这样您的工具箱将真正得到扩展。

If、then、else 语句

bash 的 if 命令是个复合命令,它测试一个测试或命令($?)的返回值,并根据返回值为 True(0)或

False(不为 0)进行分支。虽然上面的测试只返回 0 或 1 值,但命令可能返回其他值。请参阅 LPI

exam 102 prep: Shells, s cripting, programming, and compiling 教程学习这方面的更多内容。

Bash 中的 if 命令有一个 then 子句,子句中包含测试或命令返回 0 时要执行的命令列表,可以有一个

或多个可选的 elif 子句,每个子句可执行附加的测试和一个 then 子句,子句中又带有相关的命令列表

,最后是可选的 else 子句及命令列表,在前面的测试或 elif 子句中的所有测试都不为真的时候执行,

最后使用 fi 标记表示该结构结束。

使用迄今为止学到的东西,现在能够构建简单的计算器来计算算术表达式,如清单 9 所示:


清单 9. 用 if、then、else 计算表达式
[ian@pinguino ~]$ function mycalc ()
> {
>   local x
>   if [ $# -lt 1 ]; then
>     echo "This function evaluates arithmetic for you if you give it some"
>   elif (( $* )); then
>     let x="$*"
>     echo "$* = $x"
>   else
>     echo "$* = 0 or is not an arithmetic expression"
>   fi
> }
[ian@pinguino ~]$ mycalc 3 + 4
3 + 4 = 7
[ian@pinguino ~]$ mycalc 3 + 4**3
3 + 4**3 = 67
[ian@pinguino ~]$ mycalc 3 + (4**3 /2)
-bash: syntax error near unexpected token `('
[ian@pinguino ~]$ mycalc 3 + "(4**3 /2)"
3 + (4**3 /2) = 35
[ian@pinguino ~]$ mycalc xyz
xyz = 0 or is not an arithmetic expression
[ian@pinguino ~]$ mycalc xyz + 3 + "(4**3 /2)" + abc
xyz + 3 + (4**3 /2) + abc = 35
       
 

 

这个计算器利用 local 语句将 x 声明为局部变量,只能在 mycalc 函数的范围内使用。let 函数具有几

个可用的选项,可以执行与它密切关联的 declare 函数。请参考 bash 手册或使用 help let 获得更多信

息。

如清单 9 所示,需要确保在表达式使用 shell 元字符 —— 例如(、)、*、> 和 < 时 —— 正确地对表

达式转义。无论如何,现在有了一个非常方便的小计算器,可以像 shell 那样进行算术计算。

在清单 9 中可能注意到 else 子句和最后的两个示例。可以看到,把 xyz 传递给 mycalc 并没有错误,

但计算结果为 0。这个函数还不够灵巧,不能区分最后使用的示例中的字符值,所以不能警告用户。可以

使用字符串模式匹配测试(例如
[[ ! ("$*" == *[a-zA-Z]* ]]
,或使用适合自己范围的形式)消除包含字母表字符的表达式,但是这会妨碍在输入中使用 16 进制标记

,因为使用 16 进制标记时可能要用 0x0f 表示 15。实际上,shell 允许的基数最高为 64(使用

base#value 标记),所以可以在输入中加入 _ 和 @ 合法地使用任何字母表字符。8 进制和 16 进制使用

常用的标记方式,开头为 0 表示八进制,开头为 0x 或 0X 表示 16 进制。清单 10 显示了一些示例。


清单 10. 用不同的基数进行计算
[ian@pinguino ~]$ mycalc 015
015 = 13
[ian@pinguino ~]$ mycalc 0xff

本新闻共4页,当前在第3页  1  2  3  4  

 
上一篇: 用户和Linux之间的接口:shell命令
下一篇: sql server中扩展存储过程
返回首页 | 联系我们 | 关于我们 | 友情连接 | 网站地图 | RSS聚合