Sehll script是利用shell的功能所写的一个程序,这个程序使用纯文本文件,将一些shell的语法与命令写在里面,搭配正则表达式、管道命令与数据流重定向等功能,已达到我们所以想要的处理目的。
一、script的编写与执行
执行sh文件的方法:
- 直接命令执行(文件必须具备rx权限)
使用绝对路径来执行
使用相对路径来执行
将sh文件放在PATH变量指定的目录下,例如:~/bin/
- 以bash进程来执行:通过“bash shell.sh”或“sh shell.sh”来执行(文件只需具备r权限,且当前目录下存在该sh文件)
- source或者小数点(.)来执行,例如:source shell.sh
二、script的执行方式区别
利用直接执行的方式来执行script:在子进程中执行(直接命令执行、bash进程执行都属于这种)
利用source来执行脚本:在父进程中执行(命令格式:source 文件名)
三、善用判断式(test或者中括号)
1、test命令
检测系统上面某些文件或者是相关的属性、字符串、多重条件判断
举例:
- 用户首选输入一个文件名
- 如果文件不存在,则输出文件不存在并中断程序;
- 若文件存在,则判断是文件或目录,然后输出相应结果;
- 判断用户对这个文件或者目录所拥有的权限,并输出权限数据;
2、【】判断符号
在方括号中的每个组件都需要用空格隔开,变量用双引号括起来,常量用单或者双引号括起来
例如:
箭头所对应的都是空格。
3、shell script默认变量$0,$1,。。。
执行脚本的后面可以带参数。
$0默认为文件名,其后的是参数。$#代表参数个数,$@代表"$1"," $2","$3"等$*代表“$1c$2c$3”,其中c是分隔符,默认是空格键
举例:
执行一个带参数的script,要求屏幕显示:
- 文件名;
- 共有几个参数;
- 若参数小于2则告知参数太少;
- 全部参数内容;
- 第一个参数;
- 第二个参数;
四、条件判断式
1、If...then
if [ 条件判断式一 ]; then
程序段
elif [ 条件判断式二 ]; then
程序段
else
程序段
fi
(注意事项:if 和 [ 之间需要有空格,; 和 then之间也需要空格)
举例:
2、case...esac
case $变量名称 in
"第一个变量内容")
程序段
;;
"第二个变量内容")
程序段
;;
*)
程序段
exit 1
;;
Esac
举例:
五、函数
function fname(){
程序段
}
其中function也是拥有内置变量的,它与shell script很类似,函数名称表示$0,后续变量是以$1,$2...替代的
六、循环
1、 while [ condition ]
do
程序段
done
2、 until [ condition ]
do
程序段
done
3、 for var in conl con2 con3
do
程序段
done
4、 for ( ( 初始值; 限制值; 执行步长 ) )
do
程序段
done
七、追踪与调试
sh [-nvx] 文件名
-n:不要执行脚本,仅查询语法的问题
-v:在执行脚本前,先将脚本的内容输出到屏幕上
-x:将使用到的脚本内容显示到屏幕上