Shell Script
script三种执行方式的区别(source, bash script, ./script)
利用bash或./来执行脚本时,该script都会使用一个新的bash环境来执行脚本内的命令
使用./来执行一个脚本时,需要check脚本是否具有可执行权限,没有需要加上
这就涉及了父进程/子进程的概念,当子进程完成后,子进程内的各项变量或操作结果将会结束而不会传回到父进程中
利用source来执行脚本,会在父进程中执行
利用判断符号[]
[ "$name" == "VBird"]
需要注意的是:
1. 在中括号内的每个组件都需要有空格键来分隔
2. 在中括号内的变量,最好都以双引号括起来
3. 在中括号内的常量,最好都以单或双引号括起来
shell script 的默认变量($0,$1…)
这些变量的意思是,在实行脚本命令是,可以通过命令后面接参数,那么一个命令就可以处理完毕而不需要手动再次输入一些变量的行为
例如: scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
$# 可以获取后接的参数的个数
$@ 代表"$1"、"$2"、"$3"、"$4",每个变量是独立的(用双引号括起来)
条件判断式
if [ "$yn" == "Y" ] || [ "$yn" == "N" ]; then
...
#exit 0
elif [ 条件判断式 ]; then
...
else
...
fi
shell允许测试linux文件系统上文件和目录的状态 e.g. -d file 检查file是否存在并是一个目录, -e检查file是否存在等
if 还支持双括号(( expression )),允许比较过程中使用高级数学表达式,如:++ ! ! **等,同时还支持模式匹配
case…esac判断
case $变量名称 in
"第一个变量内容")
echo "hello"
;;
"第二个变量内容")
echo "test"
;;
*)
echo "other"
;;
esac
利用function功能
function fname() {
...
}
因为shell script的执行方式是由上而下、由左而右,因此在shell script中的function的设置一定要定义在程序的最前面,这一点和c有些类似
例子:
function printit () {
encho "Your choice is $1"
}
case $1 in
"one")
printit 1
;;
"two")
printit 2
;;
*)
echo "test"
;;
esac
可以了解到传参的方式和shell script传参方式十分类似
循环(loop)
while do done, until do done(不定循环)
while [ condition ]
do
...
done
-------------------
until [ condition ]
do
...
done
for ... do ... done (固定循环)
方式一:
for var in con1 con2 con3 ...
do
...
done
1到100的循环
for sitenu in $(seq 1 100)
do
...
done
方式二:
s=0
for ( ( i=1; i<=$nu; i=i+1) )
do
s=$( ($s+$i) )
done
echo "Result is $s"
shell支持通过目录路径遍历目录