mender Shell script学习笔记 Jun 20, 201316:55:23
-
良好的shell script 文件头风格
-
功能
-
版本信息
-
作者与联系方式
-
版权宣告
-
修改历史
-
特殊命令使用绝对路径下达
-
环境变量
-
-
执行shell script
-
source 使用父进程的bash环境来执行
-
sh script_file 使用新的bash环境来执行
-
./script_file 同上
-
-
变量定义
var=”value”
var=$other_var
注意等号两边不能有
-
在shell script中执行外部命令
$(command)
-
在shell script中进行数值计算
$((+ - * / %))
-
条件判断
-
使用test
-
使用[ someword ],括号与someword之间有一个空格
-
[]内的每个组件都要用空格来分隔,例如[ 1 == 2 ],==两边也有空格
-
[]内的变量,最好用“”来括起来
-
[]内的常数,最好用''或“”括起来
-
-
常用判断条件
-
档案类型判断 test -e filename或者[ -e filename ]
-
-e 档案是否存在
-
-f 档案是否存在且是文件(file)
-
-d 档案是否存在且为目录(directory)
-
-b 档案是否存在且为block device
-
-c 档案是否存在且为character device
-
-S 档案是否存在且为Socket
-
-P 档案是否存在且为Pipe
-
-L 档案是否存在且为Linkfile
-
-
档案权限判断 test -r filename或者[ -r filename ]
-
-r 可读?
-
-w 可写?
-
-x 可执行?
-
-u SUID?
-
-g SGID?
-
-k Sticky bit?
-
-s 档案存在且非空
-
-
档案之间的比较 test file1 -nt file2或者[ file1 -nt file2 ]
-
-nt 判断file1是否比file2新(newer than)
-
-ot 判断file1是否比file2旧(older than)
-
-ef 判断file1与file2是否为同一个档案(相同的inode)
-
-
整数之间的判定test n1 -eq n2或者[ n1 -eq n2 ]
-
-eq equal
-
-ne not equal
-
-gt greater than
-
-lt less than
-
-ge greater or equal
-
-le less or equal
-
-
判断字符串的数据
-
test -z string 空串返回true
-
test -n string 非空返回true,-n可省略
-
test str1 = str2 相等返回true
-
test str != str2 不等返回true
-
-
多重判定 test -r filename -a -x filename
-
-a and,也可以用&&
-
-o or,也可以用||
-
! 取反
-
-
-
-
Shell script的命令行参数
$0 执行的脚本文件名
$1 $2 … 文件名后的参数
$# 参数的个数(不包括$0)
$@ 代表 “$1” “$2” “$3” “$4”...每个变量是独立的(用双引号括起来)
$* 代表 ”$1c$2c$3c...” 其中c为分隔符,默认为空格
-
命令参数偏移shift
shift N,其中N代表偏移的个数(不包括$0)
-
if条件判断
if与[]之间有一个空格
-
if [ 条件判断式 ]; then
当条件判断式成立时,进行的操作;
fi
-
if [ 条件判断式 ]; then
当条件判断式成立时,进行的操作;
else
当条件不成立时的操作
fi
-
if [ 条件判断式1 ]; then
当条件判断式1成立时,进行的操作;
elif [ 条件判断式2 ]; then
当条件判断式2成立时,进行的操作;
else
当以上条件判断式不成立时,进行的操作;
fi
-
-
利用case...esac判断
case $变量名称 in
“第一个变量的内容”)
程序段
;;
“第二个变量的内容”)
程序段
;;
*)
以上不成立的时候执行
exit 1
;;
esac
-
while循环
while与[]之间有一个空格
while [ condition ]
do
条件成立时循环
done
-
until 循环
until 与[]之间有一个空格
until [ condition ]
do
条件成立时结束循环
done
-
for循环
for var in con1 con2 con3 …
do
程序段
done
或者
for ((初始值; 限制值; 执行步长))
do
程序段
done
-
产生连续的数seq
例如循环100次:
for var in $(seq 1 100)
do
done
-
调试sh
sh [-nvx] scripts.sh
-n 不执行,只检查语法错误
-v 执行script前,将script内容输出到屏幕
-x 将使用到的script现实到屏幕上(debug时很有用)