SHELL test [命令用法(三)

 其余的字符串运算符对两个变量/字符串之间的精确匹配或其中的差异(您也可以称之为等价性和“不等价性”)进行评估。第一个例子对匹配进行测试:

  $ env

  LOGNAME=emmett

  PAGER=less

  SHELL=/bin/bash

  TERM=linux

  $

  $ [ "$LOGNAME" = "emmett" ]

  $ echo $?

  0

  $

  $ [ "$LOGNAME" = "kristin" ]

  $ echo $?

  1

  $

  或者,该评估可以以脚本的形式用于决定是否运行脚本:

  #example4

  if [ "$LOGNAME" = "emmett" ]

  then

  echo "processing beginning"

  else

  echo "incorrect user"

  fi

  这种方法可以用来寻找任意的值(如终端类型或 shell 类型),在允许脚本运行之前这些值必须匹配。请注意,= 或 != 运算符的优先级高于其它大多数可指定选项,且要求必须伴有表达式。因此,除了比较字符串的选项之外,= 或 != 都不能和检查某种东西(如可读文件、可执行文件或目录)的存在性的选项一起使用。

  整数比较运算符

  正如字符串比较运算符验证字符串相等或不同一样,整数比较运算符对数字执行相同的功能。如果变量的值匹配则表达式测试为真,如果不匹配,则为假。整数比较运算符不处理字符串(正如字符串运算符不处理数字一样):

  int1 -eq int2 如果 int1 等于 int2,则为真

  int1 -ge int2 如果 int1 大于或等于 int2,则为真

  int1 -gt int2 如果 int1 大于 int2,则为真

  int1 -le int2 如果 int1 小于或等于 int2,则为真

  int1 -lt int2 如果 int1 小于 int2,则为真

  int1 -ne int2 如果 int1 不等于 int2,则为真

  以下示例显示了一个代码段,其中在命令行中给出的值必须等于 7:

  #example5

  if [ $1 -eq 7 ]

  then

  echo "You've entered the magic number."

  else

  echo "You've entered the wrong number."

  fi

  运行中:

  $ example5 6

  You've entered the wrong number.

  $

  $ example5 7

  You've entered the magic number.

  $

  和字符串一样,比较的值可以是在脚本外为变量赋的值,而不必总是在命令行中提供。以下示例演示了实现这一点的一种方法:

  #example6

  if [ $1 -gt $number ]

  then

  echo "Sorry, but $1 is too high."

  else

  echo "$1 will work."

  fi

  $ set number=7

  $ export number

  $ example6 8

  Sorry, but 8 is too high.

  $ example6 7

  7 will work.

  $

  整数比较运算符最佳的用途之一是评估指定的命令行变量的数目,并判断它是否符合所要求的标准。例如,如果某个特定的命令只能在有三个或更少变量的情况下运行,

  #example7 - display variables, up to three

  if [ "$#" -gt 3 ]

  then

  echo "You have given too many variables."

  exit $#

  fi

  只要指定三个或更少的变量,该示例脚本将正常运行(并返回值 0)。如果指定了三个以上的变量,则将显示错误消息,且例程将退出 — 同时返回与命令行中给定的变量数相等的退出代码。

  对这个过程进行修改可以用来在允许运行报表之前判断当天是否是本月的最后几天:

  #example8 - to see if it is near the end of the month#

  set `date` # use backward quotes

  if [ "$3" -ge 21 ]

  then

  echo "It is close enough to the end of the month to proceed"

  else

  echo "This report cannot be run until after the 21st of the month"

  exit $3

  fi

  在这个例子中,设置了六个变量(通过空格彼此分开):

  $1 = Fri

  $2 = Feb

  $3 = 6

  $4 = 08:56:30

  $5 = EST

  $6 = 2004

  这些值可以在脚本中使用,就像它们是在命令行中输入的一样。请注意,退出命令再次返回一个值 — 在这种情况下,返回的值是从 $3 的值中得到的日期。这一技巧在故障诊断时会非常有用 — 如果您认为脚本应该运行而没有运行,那么请查看 $? 的值。

  一种类似的想法可能是撰写一个只在每个月的第三个星期三运行的脚本。第三个星期三一定在该月的 15 日到 21 日之间。使用 cron,您可以调用脚本在 15 日到 21 日之间每天的一个指定时间运行,然后使用脚本的第一行检查 $1(在设置日期之后)的值是否为 Thu。如果为 Thu,那么执行剩下的脚本,如果不是,则退出。

  而另一个想法可能是,只允许脚本在超过 6:00 p.m. (18:00),所有用户都回家之后运行。只要撰写脚本,使其在值低于 18 时退出,并通过使用以下命令来获取时间(将其设为 $1)

  set `date +%H`

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值