分类: LINUX
2013-12-20 12:54:44
一、shell脚本介绍
脚本第一行总是以#!/bin/sh开始,这段脚本通知shell使用系统上的Bourne shell解释器。脚本从上到下执行,运行脚本前需要增加其执行权限。
二、条件测试
1、 测试文件状态
test一般有两种格式,即:
test condition
或
[ c o n d i t i o n ]
使用方括号时,要注意在条件两边加上空格。 e.g [ -w file]
2、 测试时使用逻辑操作符
-a 逻辑与, -o 逻辑或,! 逻辑否。
e.g. [ -w result.txt –a –w scores.txt]
3、 字符串测试
五种格式:
test “string”
test op “string”
test “string” op “string”
[ op string ]
[string op string]
其中,操作符op可为:
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。
4、 测试数值
一般格式如下:
" n u m b e r " n u m e r i c o p e r a t o r " n u m b e r "
或者
[ " n u m b e r " n u m e r i c o p e r a t o r " n u m b e r " ]
n u m e r i c o p e r a t o r可为:-eq -ne -gt -lt -le -ge
5、 expr用法
e x p r命令一般用于整数值,但也可用于字符串。
一般格式为:expr argument operator argument
e x p r也是一个手工命令行计数器。使用乘号时,必须用反斜线屏蔽其特定含义。
e.g1. expr 30 \* 3
e.g2. LOOP=0
LOOP=`expr $LOOP + 1`
三、控制流结构
1、 退出状态
任何命令进行时都将返回一个退出状态。查看其退出状态:echo $?
2、 控制结构
If语句格式为:
if 条件1
then 命令1
elif 条件2
then 命令2
else 命令3
fi
case语句格式如下:
case 值i n
模式1 }
命令1
. . .
; ;
模式2)
命令2
. . .
;;
e s a c
f o r循环一般格式为:
for 变量名i n列表
d o
命令1
命令2?
d o n e
u n t i l循环执行一系列命令直至条件为真时停止。条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次。
u n t i l循环格式为:
until 条件
命令1
. . .
d o n e
while循环:
while 命令
d o
命令1
命令2
. . .
d o n e
break和continue语句
四、Shell函数
s h e l l允许将一组命令集或语句形成一个可用块,这些块称为s h e l l函数。定义函数的格式为:
函数名()
{
命令1
. . .
}
所有函数在使用前必须定义。调用函数仅使用其函数名即可。向函数传递参数就像在一般脚本中使用特殊变量$ 1 , $ 2 . . . $ 9一样,函数取得所传参数后,将原始参数传回shell脚本。可以直接在脚本调用函数语句的后面使用最后状态命令来测试函数调用的返回值。更好的办法是使用i f语句测试返回0或者返回1。
载入shell函数: . /functions.sh
检查载入函数: set命令将在s h e l l中显示所有的载入函数。
执行shell函数:要执行函数,简单地键入函数名即可
删除shell函数:删除函数时u n s e t命令格式为:unset function_name
五、向脚本传递函数
1、 shift命令
它每次将参数位置向左偏移一位。
如果需要知道命令行中输入的最后一个参数(通常是一个文件名),可以有两种选择:使用命令eval echo \$$#;使用s h i f t命令:shift 'expr $# -2'。
2、 getopts
g e t o p t s一般格式为:getopts option_string variable
六、调试脚本常见错误
f o r、w h i l e、u n t i l和c a s e语句中的错误是指实际语句段不正确。也许漏写了固定结构中的一个保留字。
第二个典型错误是漏写引号错误。
另一个常见错误是在使用- e q语句时忘记在测试条件一边使用数字取值。
经验上讲大多数错误是由于使用变量时大小写保持不一致。
使用f o r循环时,有时会忘了在循环的列表部分用$符号,特别是在读取字符串时。
最有用的调试脚本工具是e c h o命令。一般在可能出现问题的脚本重要部分加入e c h o命令,例如在变量读取或修改操作其前后加入e c h o命令。
s e t命令可辅助脚本调试。以下是s e t命令常用的调试选项:
set -n 读命令但并不执行。
set -v 显示读取的所有行。
set -x 显示所有命令及其参数。