注意事项:
- 指令的执行是从上而下、从左而右的分析与执行;
- 指令的下达: 指令、选项与参数间的多个空白都会被忽略掉;
- 空白行也将被忽略掉,幵且 [tab] 按键所推开的空白同样规为空格键;
- 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令;
- 至于如果一行的内容太多,则可以使用『 [Enter] 』来延伸至下一行;
- 『 # 』可做为批注!任何加在 # 后面的资料将全部被视为批注文字而被忽略!
执行方法
直接指令下达:
第一支script
#!/bin/bash
PATH=PATH:~/bin
export PATH
echo -e "Hello World!\a \n"
exit 0
chmod a+x sh01.sh;./sh01.sh
判断式test
test -e filename
Test的标识 | 代表意义 |
---|---|
1.以下开始为: | 关于某个档名的文件类型判判断,如 tets -e filename |
-e | 该档名是否存在 |
-f | 是否存在且为file |
-d | 是否存在且为directory |
-b | 是否存在且为一个block device装置 |
-c | 是否存在且为一个character device 装置 |
-S | 是否存在且为一个Socket档案 |
-p | 是否存在且为一个FIFO档案 |
-L | 是否存在且为一个连结档 |
2.以下开始为: | 关于某个档案的权限侦测,如 tets -r filename表示是否可读 |
-r | 是否存在且可读 |
-w | 是否存在且可写 |
-x | 是否存在且可执行 |
-u | 是否存在且具有SUID属性 |
-g | 是否存在且具有SGID属性 |
-k | 是否存在且具有Sticky bit属性 |
-s | 是否存在且为非空白档案 |
3.以下开始为: | 两个档案之间的比较,如test file1 -nt file2 |
-nt | (newer than) |
-ot | older than |
-ef | equal file |
4.以下开始为: | 关于两个整数之间的判断,如test n1 -eq n2 |
-eq | equal |
-ne | not equal |
-gt | greater than |
-lt | less than |
-ge | greater than or equal |
-le | less than or equal |
5.以下开始为: | 判定字符串的数据 |
test -z string | zero |
test -n string | not zero |
test str1 = str2 | equal? |
test str1 != str2 | not equal? |
6.以下开始为: | 多重条件判定,test -r filename -a -x filename |
-a | test -r file -a -x file |
-o | test -r file -o -x file |
! | test ! -x file |
判定符号[]
在bash语法中使用[]来作为shell的判断式时,必须要注意中括号的两端需要有空格符来分隔。
[ "$HOME" == "$MAIL" ]
//bash当中一个=和两个=一样,推荐两个
- 中括号内部的每个组件需要有空格键分隔
- 中括号内的变数最好都以双引号括起来
- 中括号内的常数最好都以单或双引号括起来
默认变数($0,$1)
$#
: 代表后接的参数个数$@
:全部参数,代表"$1" "$2" "$3" ...
$*
:$1 $2 $3 ...
shift n偏移几个,默认n=为0,移除第一个
条件判断式
if then语句
if[];then
;
fi
if[];then
else
;
fi
if[];then
;
elif[];then
;
else
;
fi
[ "$yn" == "Y" -o "$yn" == "y" ]
等同于
[ "$yn" == "Y"] || ["$yn" == "y" ]
case esac语句
case $变量名称 in
"第一个变量内容")
程序段
;;
"第二个变量内容")
程序段
;;
*)
exit 1
;;
esac
function
function fname(){
程序段
}
函数内建变量形式和bash一样 $1,$2..
循环loop
while []
do
程序段
done
until[]
do
程序段落
done
for var in con1 con2 con3 ...
do
程序段
done
for((初始值;限制值;执行步阶))
do
程序段
done
追踪与debug
sh [-nvx] scripts.sh
-n:不执行仅检查语法问题
-v:执行前,先将脚本内容输出到屏幕上
-x:将使用用的脚本内容显示到屏幕上