Shell编程之判断条件

     最近在学习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"
fi

if [ 1 -gt 0 ]; then
        echo "One is greater than zero"
fi

if test 1 -gt 0 -a 2 -gt 1 ; then
        echo "One is greater than zero and two is greater than one"
fi

if [ 1 -gt 0 -a 2 -gt 1 ]; then
        echo "One is greater than zero and two is greater than one"
fi

if test 1 -gt 0 -o 1 -gt 2; then
        echo "One is greater than zero or one is greater than two"
fi

if [ 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 zero
One is greater than zero
One is greater than zero and two is greater than one
One is greater than zero and two is greater than one
One is greater than zero or one is greater than two
One is greater than zero or one is greater than two
再看一段字符串比较的代码
if [ -n "Hello" ]; then
        echo "The 'Hello' is not empty string"
fi

if [ -z ""]; then
        echo "The string is empty"
fi

if [ "hello" = "hello" ]; then
        echo "These string are equal"
fi

if [ "hello" != "hell" ]; then
        echo "These string are not equal"
fi
输出如下:

The 'Hello' is not empty string
The string is empty
These string are equal
These 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脚本还需要多加练习。

 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skyWalker_ONLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值