测试运算符
-z 字符串长度为空
-n 字符串长度不为空
上面这俩,当条件满足时,取值为真,呃,个人偏爱-z,以至于当需要判断不为空时,仍用 ! -z .....您当我犯贱吧...
整数测试
intl -eq int2 int1等于int2
ntl -ne int2 int1不等于int2
ntl -gt int2 int1大于int2
ntl -ge int2 int1大于或等于int2
ntl -lt int2 int1小于int2
ntl -le int2 int1小于或等于int2
我会告诉大家,我写这些出来,是因为我压根就记不住吗
逻辑测试
expr1 -a expr2 逻辑与 &&
expr1 -o expr2 逻辑或 ||
这个传说中的逻辑与和逻辑或..这是坑....
文件测试
-b filename 该文件是块特殊文件
-c filename 该文件是字符特殊文件
-d filename 该目录是否存在
-f filename 该普通文件存在且不是目录
-g filename 设置了set-group-ID位
-k filename sticky位被设置
-p filename 该文件是命名管道
-r filename 读
-s filename 大小不为0
-u filename 设置了set-user-ID位
-w filename 该文件可写
-x filename 该文件可执行
-L 或者 -H filename 链接文件 快捷方式
记得上次整理笔记的时候,把 -L给忘写了...以至于上次作业,老师的意思估计是让用判断语句判断文件,目录和链接...当时我以为没有判断链接文件测试条件....后来...我用find....
特殊变量
$0 脚本自身的名字
$? 前一命令的退出状态
$$ shell进程的进程编号
$! 最近一个后台命令的进程编号。以此方式存储进程编号
$@ 输出所有传递的参数值:区别&下:加双引号时,所有的参数均为独立值
$* 输出所有传递的参数值:区别&上:加双引号时,所有参数变为一个值
$# 传递的位置参数总个数
$HOEM 当前用户家目录
$PS1 主要命令提示符字符串
$LANG 当前编码环境
$PPID 父进程编号
$PWD 当前的工作目录
其中$@和$*区别,例:
[root@bogon shellscripts]# set 'apple pie' pears peaches
[root@bogon shellscripts]# for i in "$*"; do echo $i; done
apple pie pears peaches $*加引号时,注意结果
[root@bogon shellscripts]# for i in "$@"; do echo $i; done
apple pie $@加引号时,注意结果
pears
peaches
替换运算符
${varname:-word} 定义默认值,$varname变量名
${varname:+word} 如果变量存在,则显示word值,否则返回空,用于测试变量是否存在和约束输入
${varname:?message} 如果变量为空,则显示message信息,主要用于排错
我只能说,这个很重要...你懂的...