[ ] 等价于 test命令
$0: shell或shell脚本的名字
$*: 以一对双引号给出参数列表
$@: 将各个参数分别加双引号返回
$#: 参数的个数
$_: 代表上一个命令的最后一个参数
$$: 代表所在命令的PID
$!: 代表最后执行的后台命令的PID$?: 代表上一个命令执行后的退出状态
数字测试:
-eq:等于 -ne:不等于 -gt:大于 -ge:大于等于 -lt:小于 -le:小于等于
字符串比较
== 等于 两边要有空格
!= 不等
> 大于
< 小于
文件测试
-z string 测试指定字符是否为空,空着真,非空为假 -n string 测试指定字符串是否为不空,空为假 非空为真 -e FILE 测试文件是否存在 -f file 测试文件是否为普通文件 -d file 测试指定路径是否为目录 -r file 测试文件对当前用户是否可读 -w file 测试文件对当前用户是否可写 -x file 测试文件对当前用户是都可执行 -z 是否为空 为空则为真 -a 是否不空
字符合集:
[:alnum:] 所有的字母和数字 [:alpha:] 所有字母 [:digit:] 所有的数字 [:lower:] 所有的小写字符 [:upper:] 所有大写字母 [:blank:] 水平制表符,空白等 [:cntrl:] 所有控制字符 [:graph:] 所有可打印字符,不包括空格 [:print:] 所有可打印字符,包括空格 [:punct:] 所有的标点字符 [:space:] 所有的横向或纵向的空白 \\ 反斜杠 (第一个\转义) \t Ctrl-I tab键 \n Ctrl-J 新行 \a Ctrl-G 铃声 \b Ctrl-H 退格符 \f Ctrl-L 走行换页 \r Ctrl-M 回车 \v Ctrl-X 水平制表符
与或非
-a 与 &&
-o 或 ||
! 非 !
几个常用例子:
#用户是否存在,判断执行结果
#[]书写效果如下:
read -p "请输入用户名:" USER
id $USER &> /dev/null
if [ $? -eq 0 ];
then
echo "$USER 已存在"
else
echo "$USER 不存在"
fi
#test书写效果如下:
read -p "请输入用户名:" USER
id $USER &> /dev/null
if test $? -eq 0 ;
then
echo "$USER 已存在"
else
echo "$USER 不存在"
fi
#判断输入值,当为整数时退出
#利用 -z(或-n) 进行判断,空值为假,非空位置(取反,非空为真,空位假)
while true
do
read -p "请输入值:" NUM
test=`echo $NUM |sed 's/[0-9]//g'`
if [ -z "$test" ];then
echo "当前整数值:$NUM"
break
else
echo "当前非整数,请重新输入"
fi
done
为了书写格式化shell,一般都使用[]来代替test,不过偶尔只是一句话的判断,用test还是比较方便的。
如下,判断文件是否存:
#判断test.sh文件是否存,存在就cat
if test -f /opt/shell/test.sh;then
cat /opt/shell/test.sh
fi
发表评论