shell script
是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将shell的语法和指令写在里面搭配正规表达式、管道命令和数据流重导向等功能,以达到我们所想要处理的目的。
注意事项:
- 指令的执行是从上而下、从左而右的分析与执行
- 指令、选项与参数间的空格都会被忽悠掉
- 空白行也将被忽略掉,并且[tab]按键所推开的空白同样被忽悠
- 如果读取到一个Enter字符,就尝试开始执行命令
- [#]可做为批注!任何加在#后面的资料将全部视为批注文字被忽略
如何执行脚本
-
直接指令下达:shell文件必须要具有可读和可执行的文件
绝对路径: 相对路径:假设在工作目录内,可以直接使用./shell.sh来执行 变量[PATH]功能:将shell.sh放在PATH的指定目录内。如~/bin/
-
以bash程序来执行:透过[bash shell.sh]或[sh shell.sh]
-
用source来执行,在父进程中执行
说明script的1.内容与功能 2.版本信息 3.作者与联系方式 4.建档日期 5,历史记录等等
利用test命令测试功能
-e 文件名是否存在 -f该文件名是否存在且为文件 -d该文件名是否为存在且为目录 -r该文件名是否存在且可读 -w该文件名是否存在且可写 -x该文件名是否存在且可执行 -s该文件名是否存在且为非空白文件 -ef判断file1与file2是否为同一文件 -z string 判断字符是否为空字符,若是,则为真 !反向状态
利用判断符号[]
中括号[]的两端需要有空白符来分隔;在中括号内的变量,最好都以双引号括起来;在中括号的常量,最好以单或双引号括起来
shell script的默认变量
$#:代表后面接的参数个数
$@:代表“$1"、"$2"、"$3"之意,每个变量都是独立
$*:代表“$1c$2c$3c$4”,其中c为分隔符,默认为空格
shift:造成变量号码偏移 ##条件判断式 if...then
if[条件判断式];then当条件判断成立时,可以进行的命令工作内容fi 结束复制代码
一个条件的判断
if[条件判断式];then当条件判断成立时,可以进行的命令工作内容else当条件不成立时,可以进行的命令工作内容fi 结束复制代码
多个条件的判断
if[条件判断1];then当条件判断1成立时,可以进行的命令工作elif[条件判断2];then当条件判断2成立时,可以进行的命令工作else当条件1与条件2都不成立时,可以进行的命令内容fi 结束复制代码
netstat -tuln取得目前主机有启动的服务
几个常见的port与相关网络服务的关系是
80:www
22:ssh
21:ftp
25:mail
111:RPC(远程打印调用)
631:CUPS(打印服务功能)
##利用case...esac判断
case \$变量名称 in <==关键字为case,还有变量前有$"第一个变量内容") <==每个变量内容建议用双括号括起来,关键字则为小括号 程序段 ;; <==每个类型结尾使用两个连续的分号来处理"第二个变量内容") 程序段 ;;*) <==最后一个变量内容都会\*代表所有其他值 不包含第一个变量与第二个变量内容的其它程序执行段 exit 1 ;;esac复制代码
##利用function功能,函数功能
function fname () { 程序段}复制代码
##loop循环 不定循环
while do done
while [ condition ] <==判断式do <==do 是循环的开始 程序段落done <==done 是循环的结束复制代码
until do done
until [ condition ]do 程序段落done复制代码
固定循环 for do done
for var in con1 con2 con3...do 程序段done复制代码
第一次循环时,$var的内容为con1;
第二次循环时,$var的内容为con2;
第三次循环时,$var的内容为con3;
...
for...do...done的数值处理
for((初始值;限制值;执行步长))do 程序段done 复制代码
初始值:某个变量在循环当中的初始值,直接以类似i=1设置好
限制值:当变量的值在这个限制值的范围内,就继续进行循环,例如i<=100
执行步长:每做一次循环时的变化量。例如i=i+1
##shell script的追踪与调试
sh [-nvx] scripts.sh参数:-n:不要执行script,仅查询语法的问题;-v:在执行script前,先将script的内容输出到屏幕上-x:将使用到的script内容显示到屏幕上复制代码