一文教你入门shell脚本8.0——test命令(Shell [])简单说明

test命令

1、定义

  • testShell 内置命令,用来检测某个条件是否成立。test 通常和 if 语句一起使用,并且大部分 if语句都依赖 test
  • 进行数值字符串文件三个方面的检测

test 命令的用法为:

test expression
//当 test 判断 expression 成立时,退出状态为 0,否则为非 0 值。
或者
[ expression ]
//注意[]和expression之间的空格,这两个空格是必须的,否则会导致语法错误。[]的写法更加简洁,比 test 使用频率高。 

2、test 文件检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实例:
1、在 Shell 脚本文件所在的目录新建一个文本文件并命名为 log.txt
2、新建脚本test.sh

#!/bin/bash

read filename
read log

if test -w $filename && test -n $url
then
    echo $log > $filename
    echo "input sucessful"
else
    echo "false"
fi

3、运行 Shell 脚本,运行结果为:
在这里插入图片描述

3、test数值比较

在这里插入图片描述

#!/bin/bash

read a b

if test $a -eq $b
then
    echo "两个数相等"
else
    echo "两个数不相等"
fi

运行结果1:

10 10
两个数相等

-le选项表示小于等于,-ge选项表示大于等于,-eq表示等于

4、test字符串判断

  • ==、>、< 在大部分编程语言中都用来比较数字,而在 Shell 中,它们只能用来比较字符串
  • 不管是比较数字还是字符串,Shell 都不支持 >=<= 运算符

在这里插入图片描述

#!/bin/bash

read str1
read str2

#检测字符串是否为空
if [ -z "$str1" ] || [ -z "$str2" ]
then
    echo "字符串不能为空"
    exit 0
fi

#比较字符串
if [ $str1 = $str2 ]
then
    echo "两个字符串相等"
else
    echo "两个字符串不相等"
fi

运行结果:

hello KOBE
hi GIGI
两个字符串不相等

$str1$str2 都被双引号包围起来,这样做是为了防止 $str1 或者 $str2空字符串时出现错误

4.1、变量建议用双引号包围起来

test[] 都是命令,一个命令本质上对应一个程序或者一个函数。即使是一个程序,它也有入口函数,例如C语言程序的入口函数是 main(),运行C语言程序就从 main() 函数开始,所以也可以将一个程序等效为一个函数,这样我们就不用再区分函数和程序了,直接将一个命令和一个函数对应起来即可.

命令的本质:使用一个命令其实就是调用一个函数,命令后面附带的选项和参数最终都会作为实参传递给函数。

假设 test 命令对应的函数是 func(),使用test -z $str1命令时,会先将变量 $str1 替换成字符串:

  • 如果 $str1 是一个正常的字符串,比如 abc123,那么替换后的效果就是test -z abc123,调用 func() 函数的形式就是func("-z abc123")test 命令后面附带的所有选项和参数会被看成一个整体,并作为实参传递进函数。
  • 如果 $str1 是一个空字符串,那么替换后的效果就是test -z ,调用 func() 函数的形式就是func("-z"),这就比较奇怪了,因为-z选项没有和参数成对出现,func() 在分析时就会出错。

如果我们给 $str1 变量加上双引号,当 $str1 是空字符串时,test -z "$str1"就会被替换为test -z "",调用 func() 函数的形式就是func("-z \"\""),很显然,-z选项后面跟的是一个空字符串(\"表示转义字符),这样 func() 在分析时就不会出错了。

5、test逻辑运算

在这里插入图片描述

#!/bin/bash

read str1
read str2

#检测字符串是否为空
if [ -z "$str1" -o -z "$str2" ]  #使用 -o 选项取代之前的 ||
then
    echo "字符串不能为空"
    exit 0
fi

#比较字符串
if [ $str1 = $str2 ]
then
    echo "两个字符串相等"
else
    echo "两个字符串不相等"
fi

猜你喜欢

转载自blog.csdn.net/JMW1407/article/details/107513844