shell script是自动化的利器,必须熟练掌握
1.执行方式的区别
直接以路径来执行sh文件需要有r和x权限
以sh 文件名的方式执行只需要r权限
其实也不难理解,第二种方式只是sh的参数,没有直接执行程序,所以不需要x权限
以上的执行方式都是在父进程中打开子进程来执行的,所以默认情况下自定义变量不能在两个进程间共享
而source或者 . 的方式执行的进程是直接在当前进程下执行的
2.撰写 shell script 的良好习惯建立
在文件的开头,一般要记录以下信息
- script 的功能;
- script 的版本资讯;
- script 的作者与联络方式;
- script 的版权宣告方式;
- script 的 History (历史纪录);
- script 内较特殊的指令,使用‘绝对路径’的方式来下达;
- script 运作时需要的环境变数预先宣告与设定。。
在文件的正文部分也要加适当注释,而且要适当缩进
3.数值运算
好像有很多种方式,推荐使用 $(( 运算表达式 ))
4.bash内置重要参数
$1~$n:传入程序或者函数的参数,$0表示程序或者函数本身
$*和$@,都表述所有的位置参数,前者视为一个字符串,后者则表示串行
$#,位置参数个数
$?,上一命令执行结束返回的值,通常0代表执行成功,非0代表有误
$$,目前bash shell 进程编号
5.条件判断的方法:
- ((算式)),如果算式结果是0,则返回假值1,否则返回真值0
- 内置命令:test ,特殊符号要转义,比如>,<等,要转义成/>。
- 内置命令[ ],和test相似,两者可以转换。括号中可以使用-a,-o进行逻辑组合,推荐使用
- bash关键字[[ 判断式 ]],注意空格。也不必对特殊符号转义
- &&和||,和-a,-o相比,用在括号[]以外
条件判断式的种类
- 文件属性:有很多属性,-ewrx,共20多条
- 字符串属性:-z,空为真。-n,非空为真。等。
- 算式:-eq, -ne, -lt, -le, -gt, -ge。这里的算式是指其值或运算结果是数值。应该和>,<差不多吧?不确定
- bash选项,[-o set的选项名称],如[-o history],若该选项开启,则返回0
6. 流程控制
主要是细节
1.if条件判断
完整语法:
if 条件测试1 ; then
命令区域1
elif 条件测试2 ; then
命令区域2
else
命令区域3
fi
2.case条件判断
完整语法:
case 待测项 in
样式串行1) 命令区域1 ;;
样式串行2) 命令区域2 ;;
样式串行3) 命令区域3 ;;
.....
*)命令区域;;
esac
3.for循环
完整语法:
for 变量 in 串行
do
命令区域
done
for循环经常用在分隔字符串行,取出字段元素值。注意IFS默认是三个空白符(空格,tab,换行),要是“ ; ”需要自己设置。
还有一种用法,与一般语言相似
for (( ; ; ))
do
命令区域
done
4.while和until
while 条件 until 条件
do do
命令区域 命令区域
done done
while是条件真执行,until是假执行
5.break和continue
同java中差不多,break后可跟数字,表示跳出几层循环
7.function
function 函数名称()
{
命令区域
}
也可以省略function 或者(),推荐使用这种,比较
函数的结束状态也用$?来表示
函数中的变量以及变量传递:
local v 表示v是函数的局部变量,当变量传递进函数时,是值传递,而不是地址传递。
8. 追踪与调试
- [root@www ~]# sh [-nvx] scripts.sh
- 选项与参数:
- -n :不要执行 script,仅查询语法的问题;
- -v :再执行 sccript 前,先将 scripts 的内容输出到萤幕上;
- -x :将使用到的 script 内容显示到萤幕上,这是很有用的参数!
转载于:https://blog.51cto.com/heartofrong/534607