qimingstack 2011-11-15
shell脚本很多人谈论说难,当然,这点不可否认。但是shell脚本难,并不是难在它的规则,语法上。shell脚本趋向于编程,编程难吗?难!!它难在哪!它难在写程序时要像计算机一样去思考,这就是难点。shell也一样,书写语法,规则,并不难。几个小时你就可以学会。但是,把自己变成机器一样去思考,这就比较难了。如果想要克服这一点,那么需要长时间的磨练与不停的思考。
shell scripts的注意事项:shell scripts的撰写执行需要注意以下几点:
1、指令的解析执行是从上至下,从左到右的。
2、指令、选项与参数间的多个空格会被忽略。
3、空行和[TAB]键视作空格。
4、读取到Enter符号(CR)就开始尝试执行
5、可以用"\"换行
6、“#”为注释
shell script 的书写,把脚本单独放一个目录中,脚本要分段书写,并充分利用注释。
1、第一行#!/bin/bash
2、程序内容说明-文件头
3、主要环境变量、变量宣告
4、函数、主程序部分
5、执行成果报告-返回值
如果一个脚本长时间没用,或者是他人接手的时候根本看不懂这个脚本是干什么用的,本着为他人方便为自己方便的原则,就是写文件头。文件头的内容包括,脚本名称、脚本的功能描述、作者的联系方式、版权宣告、历史记录、其他,等等
在shell脚本中变量是最常用的,而且还会用到返回值,那么什么是变量,脚本返回值代表什么。
变量是脚本编程中进行数据表现的一种方法,是计算机为了保留数据项,而在内存中分配的一个位置或者一组位置的标识或名字、变量既可以出现在算术操作中,也可以出现在字符分析过程中、变量的名字就是变量保存值的地方。引用变量的值就叫做变量的替换。
变量名必须以字母或者下划线开始,后面跟字母数字或下划线。变量用“=”赋值时不要留空格。变量名是大小写敏感的、可以定义NULL值变量。例如d= c="",不要用特殊字符。如:? , * 等,不要和内部变量冲突。
变量宣告、函数等主程序等,为脚本内容,执行完后script的返回值。返回值是命令的退出状态,用来检测命令执行是否成功。比如
0 代表 成功(success)
non-zero 代表 Failure
2 代表 不正确的用法(incorrect usage)
126 代表 不可执行(Not an executable)
127 代表 命令找不到(Command not found)
我们可以用 exit n 、return N 来定义,如下图我们可以看下命令执行后的,返回值,如下图
某些时候需要两相互关联的变量才能完成一个脚本,这个时候需要数组格式var[index]=value 如下图
shell脚本常用的循环。
------------------------------------------
条件语句的,格式
if [condition]
then
command
fi
-------------------------------------------
if[condition];then
command1
else
command2
fi
---------------------------------------------
if[condition1];then
command1
elif[condition2];then
command2
else
command3
fi
-----------------------------------------------
for循环
格式:for NAME in [list];do
COMMANDS;
done
例:如下图:
--------------------------------------------------
while循环
格式:while CONTROL-COMMANDS;do
CONSEQUENT-COMMANDS;
done
例:如下图
---------------------------------------------------------------
until循环
格式:until TEST-COMMAND;do
CONSEQUENT-COMMANDS;
done
例:如下图
-------------------------------------------------------
case循环
格式:caseEXPRESSION in
CASE1 )
COMMAND-LIST
;;
CASE2)
COMMAND-LIST
;;
...CASEN)
COMMAND-LIST;;
esac
例:如下图
-----------------------------------------------------------
select (从ksh引入)
格式:select WORD [in LIST];do
RESPECTIVE-COMMANDS;
done
例如下图
-------------------------------------------------------------
从上面的例子中看到有break的字样,break语句用来在正常结束之前退出当前循环,和break想对应的还有continue语句,continue语句是几句for,while,until, select内的循环。
在shell里还有正则表达式,前面文章里已经介绍过,就不详加介绍, shell就先讨论到这里