SHELL test [命令用法(二)

 以下示例显示了此简单操作的运行情况:

  $ ls -l

  total 33

  drwxr-xr-w 2 root root 1024 Dec 5 05:05 LST

  -rw-rw-rw- 1 emmett users 27360 Feb 6 07:30 evan

  -rwsrwsrwx 1 root root 152 Feb 6 07:32 hannah

  drwxr-xr-x 2 emmett users 1024 Feb 6 07:31 karen

  -rw------- 1 emmett users 152 Feb 6 07:29 kristin

  -rw-r--r-- 1 emmett users 152 Feb 6 07:29 spencer

  $

  $ test -r evan

  $ echo $?

  0

  $ test -r walter

  $ echo $?

  1

  $

  由于第一次评估为真 — 文件存在且可读 — 返回值为真,或 0。由于第二次评估的文件不存在,该值为假,返回值不为零。将值指定为零或非零很重要,因为在失败时不会始终返回 1(虽然这是通常返回的值),可能返回一个非零值。

  正如开头所提到的,除了使用 test 外,您还可以用方括号 [ ] 将命令括住来向 shell 发出同样的命令 — 如下所示:

  $ [ -w evan ]

  $ echo $?

  0

  $ [ -x evan ]

  $ echo $?

  1

  $

  同样,第一个表达式为真,第二个表达式为假 — 正如返回值所指示的那样。您还可以使用以下命令将两个文件彼此进行比较:

  file1 -ef file2 测试以判断两个文件是否与同一个设备相连,是否拥有相同的 inode 编号

  file1 -nt file2 测试以判断第一个文件是否比第二个文件更新(由修改日期决定)

  file1 -ot file2 测试以判断第一个文件是否比第二个文件更旧

  以下示例显示了使用这些运算符比较文件的结果:

  $ [ evan -nt spencer ]

  $ echo $?

  0

  $ [ karen -ot spencer ]

  $ echo $?

  1

  $

  名为 evan 的文件比名为 spencer 的文件更新,因而评估为真。类似地,名为 karen 的文件比名为 spencer 的文件更新,因此该评估为假。

  字符串比较运算符

  如标题所示,这组函数比较字符串的值。您可以检查它们是否存在、是否相同或者是否不同。

  String 测试以判断字符串是否不为空

  -n string 测试以判断字符串是否不为空;字符串必须为 test 所识别

  -z string 测试以判断字符串是否为空;字符串必须为 test 所识别

  string1 = string2 测试以判断 string1 是否与 string2 相同

  string1 != string2 测试以判断 string1 是否与 string2 不同

  对任何变量进行的最有用的测试之一是判断它的值是否不为空,可以简单地将其放在 test 命令行中执行这种测试,如下例所示:

  $ test "$variable"

  强烈建议进行此种测试时用双引号将变量括住,以让 shell 识别变量(即使变量为空)。默认情况下执行的基本字符串评估和 -n 测试从功能上讲是相同的,如以下示例所示:

  #example1

  if test -n "$1"

  then

  echo "$1"

  fi

  执行以上例子中的代码将根据 $1 是否存在给出以下结果:

  $ example1 friday

  friday

  $

  $ example1

  $

  如果将代码更改为以下形式,则结果将相同:

  #example2

  if test "$1"

  then

  echo "$1"

  fi

  如下所示:

  $ example2 friday

  friday

  $

  $ example2

  $

  所有这些表明,通常不需要 -n,它代表默认操作。

  要从一个不同的角度来查看各种可能性,您可以用另一个选项来替换 -n,并检查该值是否为空(相对于非空)。这可以用 -z 选项来实现,代码为:

  #example3

  if test -z "$1"

  then

  echo "no values were specified"

  fi

  运行如下:

  $ example3

  no values were specified

  $ example3 friday

  $

  如果在没有命令行参数的情况下运行该程序,而表达式评估为真,那么将执行程序块中的文本。如果在命令行中有值,则脚本退出,不执行任何操作。将评估操作放在脚本的开头非常有用,这可以在可能产生错误的进一步处理之前预先检查变量值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值