shell test 参数

引用 2 楼 mymtom 的回复:
引用 1 楼 littlefirebug 的回复:
$1表示shell执行时传入的第一个参数
那么[ $1 -a -s $1 ]表示你正确输入了第一个参数并且该参数表示的文件大小不为0

楼上正解, 不过需要注意左方括号右边和右方括号左边一定要有空白字符.
而且这种形式只使用用bash, 不是所有的sh和ksh都支持这种形式.
if [ "$1" -a -s "$1" ]; then
cat $1
fi
的形式各种shell都能支持.

应该改为
Perl code
   
   

# ! /bin/sh
if [ " $1 " - a - s " $1 " ]; then
cat
" $1 "
fi


否则如果文件名中有空格的时候会出错.

====================================================================================

语法

test Expression

[ Expression ]

描述

test 命令评估 Expression 参数, 如果表达式值为 True,返回一个零(true)退出值。否则, test 命令返回一个非零(false)退出值。 如果没有参数,test 命令也返回一个非零退出值。

注:

1. 在命令的第二种格式中,[ ](方括号)必须被空白包围。

2. 必须在 C shell 中对文件名进行显式测试。文件名替换(全局)导致 shell 脚本退出。

函数与运算符被 test 命令当作独立的参数。Expression 参数指的是一个需要被检查为 true false 的条件的语句。下列函数可用来构造此参数:

-b FileName

如果所指定的 FileName 存在且是一个块特殊文件,则返回一个 true 退出值。

-c FileName

如果所指定的 FileName 存在且是一个字符特殊文件,则返回一个 true 退出值。

-d FileName

如果所指定的 FileName 存在且是一个目录,则返回一个 true 退出值。

-e FileName

如果所指定的 FileName 存在,则返回一个 true 退出值。

-f FileName

如果所指定的 FileName 存在且是一个常规文件,则返回一个 true 退出值。

-g FileName

如果所指定的 FileName 存在且它的设置组标识位已设置,则返回一个 true 退出值。

-h FileName

如果所指定的 FileName 存在且是一个符号链接,则返回一个 true 退出值。

-k FileName

如果所指定的 FileName 存在且其粘滞位已设置,则返回一个 true 退出值。

-L FileName

如果所指定的 FileName 存在且是一个符号链接,则返回一个 true 退出值。

-n String1

如果 String1 变量的长度为非零,则返回一个 true 退出值。

-p FileName

如果所指定的 FileName 存在且是一个命名管道(FIFO),则返回一个 true 退出值。

-r FileName

如果所指定的 FileName 存在且可被当前进程读取,则返回一个 true 退出值。

-s FileName

如果所指定的 FileName 存在且长度大于零,则返回一个 true 退出值。

-t FileDescriptor

如果文件描述符号为 FileDescriptor 的文件是打开的且与一个终端相连,则返回一个 true 退出值。

-u FileName

如果所指定的 FileName 存在且它的设置用户标识位已被设置,则返回一个 true 退出值。

-w FileName

如果所指定的 FileName 存在且写标志打开,则返回一个 true 退出值。 但是,FileName 在一个只读的文件系统中不可写,即使 test 指示为 true。

-x FileName

如果所指定的FileName 存在且执行标志打开,则返回一个 true 退出值。如果所指定的文件存在且是一个目录,true 退出值表示当前进程被允许在目录中搜索。

-z String1

如果 String1 变量的长度为 0(零),则返回一个 true 退出值。

String1= String2

如果 String1String2 的变量相同,则返回一个 true 退出值。

String1!=String2

如果 String1String2 的变量不相同,则返回一个 true 退出值。

String1

如果 String1 变量不是一个空字符串,则返回一个 true 退出值。

Integer1 -eq Integer2

如果Integer1Integer2 的变量在数学上相等,则返回一个 true 退出值。任一比较 -ne, -gt, -ge, -lt, -le 可被用来代替 -eq

file1 -nt file2

如果 file1file2 更新,则为 true。

file1 -ot file2

如果file1file2 旧,则为 true。

file1 -ef file2

如果 file1file2 的另外一个名称,则为 true。

这些函数可与下列运算符连在一起:

!

一元“非”运算符

-a

二进制“与”运算符

-o

二进制“或”运算符(就是说, -a 运算符的优先权比 -o 运算符高)

/(Expression/)

分组括号

退出状态

命令返回以下退出值:

0

Expression 参数为 true。

1

Expression 参数为 false 或丢失。

>1

发生错误。

示例

1. 为测试一个文件是否存在且非空, 输入:

 
 2.       
 
 if test ! -s "$1"
  
  
 
 3.       
 
 then
  
  
 
 4.       
 
    echo $1 does not exist or is empty.
  
  
fi
  
  

如果被第一个位置的参数指定给 shell 过程的文件, $1, 不存在, test 命令显示一条出错消息。如果 $1 存在且大小大于 0test 命令什么也不显示。

注:-s 函数与文件名之间必须有一空格

$1 两边的引号确保即使值 $1 为一空字符串, test 也可正常工作。如果引号被省略且 $1 是空字符串,test 命令显示出错消息 test:期望参数。

5. 为做一复杂比较,输入:

 
 6.       
 
 if [ $# -lt 2  -o  ! -e "$1" ]
  
  
 
 7.       
 
 then
  
  
 
 8.       
 
    exit
  
  
fi
  
  

如果给出的 shell 过程少于两个位置参数或被 $1 指定的文件不存在,则 shell 过程退出。特殊 shell 变量 $# 表示了在命令行输入的用以运行 shell 过程的位置参数的个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值