shell编程基础总结


测试运算符
 -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信息,主要用于排错
  我只能说,这个很重要...你懂的...

相关内容