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

Shell Script

2015-06-08 04:39 615 查看
Shell Script:

将许多指令汇整到一起,让使用者能够通过运行一个shell script档案而执行多个指令。作用主要包括:

1. 进行自动化管理

2. 追踪与管理系统的重要工作:Linux系统服务的启动接口在/etc/init.d/目录下,该目录下所有的档案都是script;包括开机(booting)过程也都是利用shell script来搜寻系统的相关设定数据,再代入各个服务的设定参数

3. 简单的入侵检测功能

4. 一次执行多条指令

5. 简易的数据处理

shell script用在系统管理上是很好的工具,但不适用于处理大量数值运算,因为其速度较慢(因为用的是外部指令与bash shell的一些默认工具,常常会调用外部函数库,所以指令周期长),且使用的CPU资源较多。

在script中,指令是从上而下、从左而右地分析执行,如果读取到一个Enter符号(CR),就尝试开始执行该行指令

执行脚本(至少需要r权限):

1. 直接指令下达:要求脚本必须要有rx权限,可以通过绝对路径、相对路径和PATH路径执行

2. 以bash程序执行:有r权限即可,通过【bash script.sh】或【sh shell.sh】执行

3. 还可以通过source或小数点(.)来执行

前两种方式都会在一个新的bash环境下运行脚本,也就是说脚本是在子程序内的bash中执行的;而source则是直接在当前的bash中执行脚本

脚本中的某些语句在以bash执行时无法正常运行,必须在添加x权限后以直接指令下达的方式运行

script中第一行【#!/bin/bash】是在宣告script使用的shell名称。因为我们使用的是bash,所以必须要宣告这个脚本使用bash的语法。于是当这个脚本被执行时,就能够加载bash的相关环境配置文件(一般是non-login shell的~/.bashrc),并且运行bash使指令能够执行

在最后最好加上exit 0,给系统回传0表示成功运行(但如果以source的方式运行,则将直接在当前bash中执行exit)

使用【$(())】来进行数值运算,不过bash shell只支持整数运算

test指令:





除test指令之外,还可以利用判断符号(中括号 [ ])进行数据判断,如[ -z "$HOME"]及[ "$HOME" == "$MAIL" ],若成立结果为1,反之为0

因为中括号"[ ]"用在很多地方,所以在bash的语法中中括号的两端需要有空格来分隔。在中括号中,变量最好用双引号引起,常数最好用单引号引起

运行脚本时后面可以接参数,$0是脚本名(若有路径的话会包含路径),第一个参数是$1,第二个是$2,依此类推。特殊变量有:

$#:代表参数的个数(不包括$0)

$@:代表【"$1" "$2" "$3" ..】,每个变量是独立的

$*:代表【"$1 $2 $3 ..."】,所有变量在一个双引号中,用分隔字符隔开(默认是空格)

shift后接数字n,代表拿掉最前面的n个变量(不包括$0)。不接参数时表示拿掉第一个

if [ 条件判断 ]; then
程序段
elif [ 条件判断 ]; then
程序段
else
程序段
fi


中括号内的条件判断不能用"<"、">",要用"-lt",“-gt”等(但"=="和"!="可以使用)。当有多个条件要判断时,可以将多个条件判断写入一个中括号(用-o,-a等连接),也可以用多个中括号,之间用(&&,||连接)

case $var in
"value1")
程序段
;;
"value2")
程序段
;;
*)
程序段
;;
esac


函数:因为shell script由上而下执行,因此function的定义一定要在程序的最前面

function 函数名() {

程序段

}

function也有内建变量,与shell script相似,$0表示函数名,$1,$2依此类推。注意,虽然命名相同,但script的参数和function的参数不是同一个东西

while [ condition ]
do
程序段
done


until [ condition ]
do
程序段
done


for var in con1 con2 con3 .. do 程序段 done
do
程序段
done
for site_no in $(seq 1 100):seq表示连续

for ((初始值; 条件判断; 执行步阶))
do
程序段
done


shell script的追踪与debug

sh [-nvx] script.sh

-n:不执行脚本,仅查询语法错误

-v:在执行脚本前,现将脚本内容输出到屏幕上

-x:将使用到的script内容显示到屏幕上(可以判断程序执行到哪里出了问题)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: