shell script 即是针对 shell 所写的脚本(程序),这个程序是使用纯文本文件,将一些 shell 的语法和指令写在里面。
注意事项:
- 指令的执行是从上而下,从左到右的分析与执行
- 指令,选项和参数之间的多个空白会被忽略掉
- 空表行也被忽略掉,tab视为空格
- 如果读取到一个 Enter 符号,尝试开始该行命令
- 如果一行的命令太多,可以使用 [ [Enter]] 来延伸到下一行
撰写好的程序可以一行一行的执行,执行这个文件的三个方法:
- 直接指令下达:shell.sh档案必须具备可读和执行的权限然后绝对路径或者局部路径执行或者 变量 [ PATH ] ,将 shell.sh 放在 PATH 的指定路径下,可以直接执行 shell
- 以 bash 程序来执行
bash文件中 #!/bin/bash 的作用是宣告档案的语法使用的是 bash 语法。当这个程序执行的时候,他就可以加载 bash 相关环境配置文件。
需要在文件中将一些重要的环境变量设置好
script 执行方法差异:
直接执行的方式或者bash
在 sh02.sh 执行完之后,子程序 bash 内所有的数据就被移除了
利用 source 执行
sh02.sh 的各项动作都会在父程序中生效
判断符号 []
使用中括号进行判断需要注意下面一些:
- 中括号中每一个组件需要空格键来分隔
- 在中括号内的变数,最好都用双引号括起来
- 中括号内的常数,最好都用单或者双引号括起来
参数
/path/to/scriptname opt1 opt2 opt3
依次对应于 $0 $1 $2 $4
即 script文件对应于变量$0,第一个参数对应于变量 $1,依次类推
除了这些数字变量外,还有一些特殊的数字变量可以在 script 内呼叫:
- $# : 表示后接的参数个数,上例为4。
- $@ : 代表[ “$1”“$2”“$3”“$4”],每个变量是独立的
- $* : 代表 [ “$1 $2 $3 $4”]
条件判断式
单层简单条件判断式:
if [ 条件判断式 ]; then
当条件判断式成功时,可以进行的操作;
fi
fi 将 if 反过来写,结束 if 之意
如果有多个判断条件
- && 代表and
- || 代表or
[ "$yn" == y -o "$yn" == Y ] //或者
[ "$yn" == y ] || [ "$yn" == Y ]
多重,复杂条件判断式:
if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的操作;
else
当条件判断不成立时,可以进行的操作;
fi
或者可以有更复杂的
if [ 条件判断式1 ]; then
当条件判断式1成立时,可以进行的操作;
elif [ 条件判断式2 ]; then
当条件判断2成立时,可以进行的操作;
else
条件1,2均不成立可以进行的操作;
fi
利用case …. esac 判断:
case \$变量名称 in
"第一个变量内容")
程序段
;;
"第二个变量内容"
程序段
;;
*) //最后一个变量内容会使用通配符代替所有的其他值
exit 1
;;
esac
利用function功能
function fname(){
程序段
}
fname是自定义的指令名称,程序段是要执行的内容
循环loop
while do done , untile do done(不固定循环)
while [ condition ]
do
程序段落
done
untile [ condition ]
do
程序段落
done
for…do…done(固定循环)
for var in con1 con2 con3...
do
程序段
done
以一次循环的时候 var 的值是 con1 ,第二次循环的时候 var 的值是 con2 ,依次类推。
for…do…done 数值处理
for((初始值;限制值;执行步阶))
do
程序段
done
shell程序的debug
sh [-nvx] script.sh
-n:不执行script,仅检查语法问题
-v:在执行script之前,先将script内容输入到屏幕上
-x:将使用到的script内容显示到屏幕上
shell中中括号,小括号,大括号,单引号双引号的作用:
小括号:
1.命令组,括号中的命令会新开一个 shell 顺序执行,所以括号内的变量不可以被脚本余下的部分使用,括号中多个命令用分好隔开
2.命令替换
3.初始化数组,如 array=(a b c d )
单中括号:
bash 的内部命令,[ 和 test 的是等同的,if/test 机构中左中括号是调用 test 的命令标识,右中括号是关闭条件判断的,test 和 [ ] 中可以用的比较符只有 == 和 != ,且两者都是用于字符串的比较,不可以用于整数比较,整数比较只可以用 -eq -ge 这种形式
双中括号:
[[ 是 bash 程序语言的关键字,并不是一个命令,支持字符串的模式匹配,使用 [[…..]] 条件判断结构,能够防止脚本中的许多逻辑错误,比如,&&,|| ,< 和 > 等都可以在其中使用,但是在单中括号中使用就会报错
大括号:
1.大括号扩展。在大括号中不允许有空白,除非这个空白被引用或转义。对大括号中以逗号为分隔符的的文件列表进行拓展,对大括号中以点点(..)为分隔符的顺序文件进行拓展
2.代码块,又称为内部组,与小括号不同,大括号不会新开一个 shell 运行,脚本余下的部分可以用括号内的变量,括号内的命令用分号隔开,最后一个也必须有分号,{}的第一个命令和左括号之间必须要有一个空格。