shell中test命令及判断符号[ ]的用法统计

来源:互联网 发布:linux 查看服务器版本 编辑:程序博客网 时间:2024/05/22 12:26

一、test命令的测试功能

(1)、关于某个文件名的"文件类型"判断,eg: test -e filename表示存在否

-e :该文件名是否存在(常用)

-f :该文件名是否存在且为文件(file)(常用)

-d :该文件名是否存在且为目录(directory)(常用)

-b :该文件名是否存在且为一个block device设备

-c :该文件名是否存在且为一个character device设备

-S :该文件名是否存在且为一个Socket文件

-p :该文件名是否存在且为一个FIFO(pipe)文件

-L :该文件名是否存在且为一个连接文件

(2)、关于文件的权限检测,eg:test -r filename 表示是否可读(但root权限常有例外)

-r :检测该文件名是否存在且具有“可读”的权限

-w :检测该文件名是否存在且具有“可写”的权限

-x :检测该文件名是否存在且具有“可执行”的权限

-u :检测该文件名是否存在且具有“SUID”的属性

-g :检测该文件名是否存在且具有“SGID”的属性

-k :检测该文件名是否存在且具有“Sticky bit”的属性

-s :检测该文件名是否存在且为“非空白文件”

(3)、两个文件之间的比较,eg:test file1 -nt file2

-nt :(newer than)判断file1是否比file2新

-ot :(older than)判断file1是否比file2旧

-ef :判断file1与file2是否为同一文件,可用在判断hard link的判定上。主要意义在于判定两个文件是否均指向同一个inode

(4)、关于两个整数之间的判定,eg:test n1 -eq n2

-eq :两数值相等(equal)

-ne :两数值不等(not equal)

-gt :n1大于n2(greater than)

-lt :n1小于n2(less than)

-ge :n1大于等于n2(greater than or equal)

-le :n1小于等于n2(less than or equal)

(5)、判定字符串的数据

Test -z string判定字符串是否为0,若string为空字符串,则为true

Test -n string判断字符串是否为非0,若字符串为空,则为false     注:-n也可省略

test str1 = str2判定str1是否等于str2,若相等,则回传true

test str1 != str2判定str1是否不等于str2,若相等,则回传false

(6)、多重条件判定,eg:test -r filename -a -x filename

-a :两个条件同时成立!例如:test -r file -a -x file,则file同时具有r与x的权限时,才回传true

-o :任何一个条件成立!例如:test -r file -o -x file,则file具有r或x的权限时,就可回传true

! :反向状态,eg:test ! -x file,当file不具有x时,回传true


例如:test -z $filename && echo "You must input a filename! " && exit 0           //判断变量filename是否为空字符串  空的话警告并退出程序

    test ! -e $filename && echo "The filename '$filename' DO NOT exists" && exit 0   //判断filename文件是否存在,不存在警告退出

    test -f $filename && filetype="regulare file"            //判断filename文件名是否存在且为文件,是文件的话,赋值给变量filetype为标准文件

    test -d $filename && filetype="directory"                 //判断filename文件名是否存在且为目录,是目录的话,赋值给变量filetype为目录文件

    test -r $filename && perm="readable"                    //判断filename文件名是否存在且具有“可读”权限,有的话赋值给变量perm为可读

    test -w $filename && perm="$perm writable"        //判断filename文件名是否存在且具有“可写”权限,有的话重新赋值给变量perm追加可写权限

    test -x $filename && perm="$perm executable"        //判断filename文件名是否存在且具有“可执行”权限,有的话重新赋值给变量perm追加可执行权限

    echo “The filename:$filename is a $filetype”

    echo "And the permissions are :$perm"


二、判断符号[ ]

[  -z  "$HOME"   ]; echo $?                 

需要特别提醒的是:在bash的语法中使用中括号作为shell的判断时,中括号两端需要有空格符来分隔。

假设空格键用“口”表示                      例子:[“$HOME”==“$MAIL”]    //(==一般用于逻辑判断;=一般用于变量赋值)

注:中括号【】内的每个组件都需要有空格键来分隔;

在中括号内的变量,最好都以双引号“ ”括号起来;

在中括号内的常量,最好都以单引号或双引号括号起来。


中括号判断一般常用在条件判断式if......then......fi中

eg:read -p “Please input (Y/N):” yn

[  "$yn"  ==  “Y”  -o  “$yn”  ==  "y"  ]  && echo "OK, continue" && exit 0           //当用户输入“Y”或“y” 时 输出OK,continue

[  "$yn"  ==  "N"  -o  "$yn"  ==  "n"  ]  && echo "oh! interrupt!" && exit 0           //当用户输入“N”或“n”时 输出oh!interrupt!

echo "I don't know what your choice is" && exit 0





1 0
原创粉丝点击