您的位置:首页 > 运维架构 > Shell

shell编程基础总结

2012-09-26 23:14 176 查看
正式学习shell编程近1周,趁着明天休息,这会也懒得写作业...做一下基础知识总结..给各位也给自己做个笔记..废话结束,下面切入正题:

测试运算符

-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信息,主要用于排错

我只能说,这个很重要...你懂的...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell shell基础