.SHELL test [命令用法(四)

布尔运算符

  布尔运算符在几乎每种语言中的工作方式都相同 — 包括 shell 脚本。在 nutshell 中,它们检查多个条件为真或为假,或者针对假的条件而不是真的条件采取操作。与 test 搭配使用的运算符有

  ! expr 如果表达式评估为假,则为真

  expr1 -a expr2 如果 expr1 和 expr2 评估为真,则为真

  expr1 -o expr2 如果 expr1 或 expr2 评估为真,则为真

  可以用 != 运算符代替 = 进行字符串评估。这是最简单的布尔运算符之一,对 test 的正常结果取非。

  其余两个运算符中的第一个是 -a(即 AND)运算符。要使测试最终为真,两个表达式都必须评估为真。如果任何一个评估为假,则整个测试将评估为假。例如,

  $ env

  HOME=/

  LOGNAME=emmett

  MAIL=/usr/mail/emmett

  PATH=:/bin:/usr/bin:/usr/lbin

  TERM=linux

  TZ=EST5:0EDT

  $

  $ [ "$LOGNAME" = "emmett" -a "$TERM" = "linux" ]

  $ echo $?

  0

  $

  $ [ "LOGNAME" = "karen" -a "$TERM" = "linux" ]

  $ echo $?

  1

  $

  在第一个评估中,两个条件都测试为真(在一个 linux 终端上登录的是 emmett),因此整个评估为真。在第二个评估中,终端检查正确但用户不正确,因此整个评估为假。

  简而言之,AND 运算符可以确保代码只在两个条件都满足时才执行。相反,只要任何一个表达式测试为真,OR (-o) 运算符即为真。我们来修改先前的例子,并将其放到一个脚本中来说明这一点:

  #example9

  if [ "$LOGNAME" = "emmett" -o "$TERM" = "linux" ]

  then

  echo "Ready to begin."

  else

  echo "Incorrect user and terminal."

  fi

  $ env

  HOME=/

  LOGNAME=emmett

  MAIL=/usr/mail/emmett

  PATH=:/bin:/usr/bin:/usr/lbin

  TERM=linux

  TZ=EST5:0EDT

  $ example9

  Ready to begin.

  $

  $ LOGNAME=karen

  $ example9

  Ready to begin.

  $

  在脚本第一次运行时,评估判断用户是否等于 emmett。如果发现用户等于 emmett,则脚本转至 echo 语句,并跳过其余的检查。它从不检查终端是否等于 linux,因为它只需要找到一条为真的语句就可以使整个运算为真。在脚本第二次运行时,它判断用户不是 emmett,因此它将检查并发现终端确实是 linux。由于一个条件为真,脚本现在转至 echo 命令。为了引出第二条消息,两个条件都必须为假。

  在先前确定时间是否为月末的例子中,可以执行类似的检查来防止用户试图在周末运行脚本:

  #example10 - Do not let the script run over the weekend#

  set `date` # use backward quotes

  if [ "$1" = "Sat" -o "$1" = "Sun" ]

  then

  echo "This report cannot be run over the weekend."

  fi

  一些有用的示例

  示例 1:在脚本文件中出现的“逻辑”的最简单的形式(如本文所有示例中所示)是“if ... then”语句。先前的一个代码段检查是否存在一定数量的变量,然后将这些变量回显。假设我们对此稍微做一些修改,比如我们想回显变量,并且每次回显均减 去最左边的变量,以显示一个倒的三角形。

  虽然这听起来很简单,但实际并非如此;这是您在执行大规模处理时想实现的方式:处理第一个变量、转移、处理下一个变量……

  出于演示的目的,可以按以下方式撰写脚本中的重要行:

  #example11 - display declining variables, up to three

  if [ "$#" -gt 3 ] # see if more than three variables are given

  then

  echo "You have given more than three variables."

  exit

  fi

  echo $*

  if test -n "$2"

  then

  shift

  echo $*

  fi

  if test -n "$2"

  then

  shift

  echo $*

  fi

  它将按以下方式执行:

  $ example11 one

  one

  $

  $ example11 one two

  one two

  two

  $

  $ example11 one two three

  one two three

  two three

  three

  $

  $ example11 one two three four

  You have given more than three variables.

  $

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值