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
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 程序段 donefor site_no in $(seq 1 100):seq表示连续
for ((初始值; 条件判断; 执行步阶)) do 程序段 done
shell script的追踪与debug
sh [-nvx] script.sh
-n:不执行脚本,仅查询语法错误
-v:在执行脚本前,现将脚本内容输出到屏幕上
-x:将使用到的script内容显示到屏幕上(可以判断程序执行到哪里出了问题)