【生意多】-免费发布分类信息
当前位置: 首页 » 新闻 » 教程 » 正文

Shell test命令(Shell [])详解附带所有选项及说明

放大字体  缩小字体 发布日期:2020-06-18 17:40:10    浏览次数:6
导读

  有C语言、C++PythonJava等编程经验的读者请注意,==、、 在大部分编程语言中都用来比较数字,而在 Shell 中,它们只能用来比较字符串,不能比较数字,这是非常奇葩的,大家要习惯。  其次,不管是比较数字还是字符串,Shell 都不支持 = 和 = 运算符,切记。  细心的读者可能已经注意到,变量 $str1 和 $str2 都被双

  有C语言、C++PythonJava等编程经验的读者请注意,==、、 在大部分编程语言中都用来比较数字,而在 Shell 中,它们只能用来比较字符串,不能比较数字,这是非常奇葩的,大家要习惯。

  其次,不管是比较数字还是字符串,Shell 都不支持 = 和 = 运算符,切记。

  细心的读者可能已经注意到,变量 $str1 和 $str2 都被双引号包围起来,这样做是为了防止 $str1 或者 $str2 是空字符串时出现错误,本文的后续部分将为你分析具体原因。

  改写上面的代码,使用逻辑运算选项:#!/bin/bash read str1 read str2 #检测字符串是否为空 if [ -z $str1 -o -z $str2 ] #使用 -o 选项取代之前的 then echo 字符串不能为空 exit 0 fi #比较字符串 if [ $str1 = $str2 ] then echo 两个字符串相等 else echo 两个字符串不相等 fi前面的代码我们使用两个[]命令,并使用运算符将它们连接起来,这里我们改成-o选项,只使用一个[]命令就可以了。在 test 中使用变量建议用双引号包围起来test 和 [] 都是命令,一个命令本质上对应一个程序或者一个函数。即使是一个程序,它也有入口函数,例如C语言程序的入口函数是 main(),运行C语言程序就从 main() 函数开始,所以也可以将一个程序等效为一个函数,这样我们就不用再区分函数和程序了,直接将一个命令和一个函数对应起来即可。

  有了以上认知,就很容易看透命令的本质了:使用一个命令其实就是调用一个函数,命令后面附带的选项和参数最终都会作为实参传递给函数。

  所以,当你在 test 命令中使用变量时,我强烈建议将变量用双引号包围起来,这样能避免变量为空值时导致的很多奇葩问题。总结test 命令比较奇葩,、、== 只能用来比较字符串,不能用来比较数字,比较数字需要使用 -eq、-gt 等选项;不管是比较字符串还是数字,test 都不支持 = 和 =。有经验的程序员需要慢慢习惯 test 命令的这些奇葩用法。

  对于整型数字的比较,我建议大家使用 (()),这在《Shell if else》中已经进行了演示。(()) 支持各种运算符,写法也符合数学规则,用起来更加方便,何乐而不为呢?

  精美而实用的网站,分享优质编程教程,帮助编程初学者。千锤百炼,只为大作;精益求精,句句斟酌;这种教程,看一眼就倾心。

 
关键词: shell 命令
(文/小编)
打赏
免责声明
• 
本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:https://www.31duo.com/news/show-286285.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
 

(c)2016-2019 31DUO.COM All Rights Reserved浙ICP备19001410号-4

浙ICP备19001410号-4