学习shell script
什么是shell script?
shell script是利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理目的。
在shell script编写中的注意事项:
1.命令的执行是从上而下、从左而右地分析与执行的;
2.命令的执行过程中,命令、参数间的多个空白都会被忽略掉;
3.空白行也将被忽略掉,并且Tab键所得的空白同样视为空白键;
4.如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令;
5.至于如果一行的内容太多的话,则可以使用“\Enter”来拓展至下一行;
6.“#”可作为批注。任何加咋在#后面的数据将全部被视为批注文字忽略掉。
假设你写的这个程序文件名是/home/dmtsai/shell.sh,则执行该文件的方法如下:
1.直接指令下达:shell.sh文件必须要具备可读与可执行的权限,然后:
绝对路径:使用/home/dmtsai/shell.sh来下达命令;
相对路径:假设工作目录在/home/dmtsai/,则使用./shell.sh来执行;
变量PATH功能:将shell.sh放在PATH指定的目录内,例如:~./bin/;
2.以bash程序来执行:透过bash shell.sh或sh shell.sh来执行。
养成编写shell script的良好习惯,在每个script的文件头处记录好:
1.script的功能;
2.script的版本信息;
3.script的作者与联络方式;
4.script的版权声明方式;
5.script的History(历史记录);
6.script内较特殊的命令,使用“绝对路径”的方式来执行;
7.script执行时需要的环境变量预先声明与设置。
善用判断式
利用test命令的测试功能
关于某个文件名的“文件类型”判断
test [-efdbcSpL] filename
-e:该文件名是否存在;
-f:该文件名是否存在且为文件;
-d:该文件是否存在且为目录;
关于文件的权限检测
test [-rwxugks] filename
-r:检测该文件名是否存在且具有“可读”权限;
-w:检测该文件名是否存在且具有“可写”权限;
两文件之间的比较
test file1 [-nt,-ot,-ef] file2
-nt:判断文件1是否比文件2新;
-ot:判断文件1是否比文件2旧;
-ef:判断文件1与文件2是否为同一文件。
关于两个整数之间的判定
test n1 [-eq,-ne,-gt,-lt,-ge,-le] n2
-eq:两数值相等;
-ne:两数值不等;
-gt:n1 > n2;
-lt:n1 < n2;
-ge:n1 >= n2;
-le:n1 <= n2;
利用判断符号[]
使用中括号注意事项:
中括号的两端需要有空格符来进行分隔;
在中括号内的每个组件都需要有空格键来分隔;
在中括号内的变量,最好都以双引号括起来;
在中括号内的常量,最好都以单或双引号括起来;
我们可以使用netstat -tuln来取得目前主机有启动的服务。
每个埠口都有其特定的网络服务,几个常见的port与相关的网络服务的关系是:
80:WWW
22:SSH
21:FTP
25:Mail
111:RPC(远程过程调用)
631:CUPS(打印服务功能)
循环(loop)
循环主要分为不定循环(while,until)以及固定循环(for),配合do、done来达成所需任务!
shell script的追踪与调试
我们可以用sh -x script.sh来进行程序的调试。