一、shell脚本介绍
1、使用脚本的原因
其中使用脚本的一个最主要的原因是因为一个字“懒”,在处理自动循环或者大的任务方面可以偷懒且省时间,如果有处理一个任务的命令清单,一个任务可能是将文件分类、向文件插入文本、迁移文件、从文件中删除行、清除系统过期文件、以及系统一般的管理维护工作等等。创建一个脚本,在使用一系列系统命令的同时,可以使用变量、条件、算术和循环快速创建脚本以完成相应工作。这比在命令行下一个个敲入要节省大量的工作时间。s h e l l脚本可以在行命令中接收信息,并使用它作为另一个命令的输入。
2、一个脚本的介绍
$ vim cleanup #!/bin/sh #name:cleanup #this is a general cleanup script echo "starting cleanup...wait" rm /usr/local/apps/log/*.log tail -40 /var/adm/messages > /tmp/messages rm /var/adm/messages mv /tmp/messages /var/adm/messages echo "finished cleanup" $ chmod u+x cleanup $ ./cleanup
脚本的第一行总是以#!/bin/sh开始,通知shell使用系统上的Bourne shell解释器,
第二,三行为注释行,介绍脚本内容,非必须;
第四----九行为要运行的而脚本内容
chmod u+x cleanup给用户执行脚本的权限
./cleanup是运行脚本,之所以不能使用cleanup,是应为当前目录不在PATH下
二、条件测试
条件测试就如同c语言中返回0或者1的条件表达式,在shell脚本中格式有所不同
1、测试文件状态
-d | 目录 |
-f | 正规文件 |
-L | 符号链接 |
-r | 可读 |
-w | 可写 |
-x | 可执行 |
-s | 文件长度大于0、非空 |
-u | 文件有suid位设置 |
文件状态即该文件是个啥玩意
注意:条件的两边都要有空格,[]前后各一个空格
$ [ -w scores.txt ] or test -w scores.txt $ echo $? 0
2、测试时使用逻辑操作符
-a 逻辑与,可以用all注记
-o 逻辑或,可以用or注记
$ [ -r result.xls -a -w scores.txt ] $echo $? 0
3、字符串测试
字符串测试是错误捕获很重要的一部分,特别在测试用户输入或者输出尤为重要,字符串测试有如下5种格式
1 test "string" 2 test string_operator "string" 3 test "string" string_operator "string" 4 [ string_operator string ] 5 [ string string_operator string ]
注:其中string_operator可为:
= 两个字符串相等
!= 两个字符串不等
-z 空字符串
-n 非空串
- 判断环境变量是否为空
$ [ -z $EDITOR] $ echo $? 1
- 判断环境变量是否为vi
$ [ $EDITOR="vi" ]
4、测试数值
测试数值可以使用很多操作符,格式如下:
test "number" numberic_operator "number"
或者
[ "number" numberic_operator "number" ]
numberic_operator可为:
-eq 数值相等 equal
-ne 数值不相等 not equal
-gt 大于 greater than
-lt 小于 less than
-le 小于等于 less equal
-ge 大于等于 greater equal
$ NUMBER=130 $[ "$NUMBER" -eq "130"] $echo $? 0 $[ "$NUMBER" -gt "130"] $echo $? 0
5、expr用法,表达式,取整
expr命令的一般格式:expr argument operator argument,
注意:operator两边的空格不能省略;当operator为乘法符号*时,必须使用\*进行屏蔽其特殊含义
- 基本用法
$ expr 10 + 10 20 $ expr 900 + 600 1500 $ expr 30 / 3 10 $ expr 3 /* 3 9
- 增量计数
$ LOOP=0 $ LOOP='expr $LOOP + 1'
从expr命令接受输出并将之放入循环变量
- 数值测试
$ expr rr + 1 //测试一个数,试图计算非整数时,返回错误 expr: non-numeric argument