Shell编程之判断条件

来源:互联网 发布:公共英语网络培训 编辑:程序博客网 时间:2024/05/17 20:33

     最近在学习nutch2.2.1时,总是对bin/nutch中的判断条件不是太明白,之前虽然看过一些shell编程的介绍,但没有深入的研究过,更别提实践过了,借着学习nutch的热情,顺便对shell编程做下深入的学习,不敢提一定要熟悉或者精通到什么地步,但能确保可以熟练地阅读shell脚本,简单的脚本也可以信手拈来吐舌头。这篇文章先简单地介绍一些判断语句,因为发现在nutch或者hadoop的脚本中判断条件的使用,无论从范围还是次数上来说都是很多的。

      Shell编程中使用test命令进行其参数表达式的真假,如果参数表达式为真则返回0,为假返回非0,这一点与许多高级语言是有不同的,比如JAVA。为了编写代码的方便,shell内置了[]替换test命令,也就是可以将test命令后的参数表达式置于[]内,其效果和直接使用test命令是一致的,有一点需要特别注意,放置在[]内的参数必须与左右两边保留空格,否则会提示类似[1: command not found的信息。下面看一些具体的代码例子。

   

if test 1 -gt 0; then        echo "One is greater than zero"fiif [ 1 -gt 0 ]; then        echo "One is greater than zero"fiif test 1 -gt 0 -a 2 -gt 1 ; then        echo "One is greater than zero and two is greater than one"fiif [ 1 -gt 0 -a 2 -gt 1 ]; then        echo "One is greater than zero and two is greater than one"fiif test 1 -gt 0 -o 1 -gt 2; then        echo "One is greater than zero or one is greater than two"fiif [ 1 -gt 0 -o 1 -gt 2 ]; then        echo "One is greater than zero or one is greater than two"fi
    上面代码片段只演示了-gt(大于)的使用,其他的比较符号还有的-lt(小于)、-eq(等于)、-ne(不等与)、-ge(大于等于)、-le(小于等于),上面代码的输出如下:
One is greater than zeroOne is greater than zeroOne is greater than zero and two is greater than oneOne is greater than zero and two is greater than oneOne is greater than zero or one is greater than twoOne is greater than zero or one is greater than two
再看一段字符串比较的代码
if [ -n "Hello" ]; then        echo "The 'Hello' is not empty string"fiif [ -z ""]; then        echo "The string is empty"fiif [ "hello" = "hello" ]; then        echo "These string are equal"fiif [ "hello" != "hell" ]; then        echo "These string are not equal"fi
输出如下:

The 'Hello' is not empty stringThe string is emptyThese string are equalThese string are not equal
最后看一下用于判断文件的常用命令,这些命令无论是在nutch还是hadoop的脚本中出现的频率都是很高的,并且大部分命令都很好理解与记忆,比如-b表示block,-d表示directory等等。

File1 –ef  File2                  两个文件具有同样的设备号和i结点号File1 –nt  File2                  文件1比文件2新File1 –ot  File2                  文件1比文件2旧–b File                           文件存在并且是块设备文件–c File                           文件存在并且是字符设备文件–d File                           文件存在并且是目录–e File                           文件存在–f File                           文件存在并且是正规文件–g File                           文件存在并且是设置了组ID–G File                           文件存在并且属于有效组ID–h File                           文件存在并且是一个符号链接(同-L)–k File                           文件存在并且设置了sticky位–L File                           文件存在并且是一个符号链接(同-h)–o File                           文件存在并且属于有效用户ID–p File                           文件存在并且是一个命名管道–r File                           文件存在并且可读–s File                           文件存在并且是一个套接字–t FD                             文件描述符是在一个终端打开的–u File                           文件存在并且设置了它的set-user-id位–w File                           文件存在并且可写–x File                           文件存在并且可执行
相对其他高级语言的学习曲线,shell编程还是简单一些,毕竟Linux或者Unix都提供了丰富的内置命令,方便大家的直接使用,不过若想真正熟练地阅读或者编写shell脚本还需要多加练习。

 


原创粉丝点击