Linux下的Sheel脚本编写比较重视格式。
1.sheel 的编写,每个文件第一行开头需要加上 #!/bin/bash
不该有的空格绝对不能加,否则就会出错。
表示变量内容时,需要加上$,如:s=1,需要用到s的数值时,需要写成$s。
2.利用判断符号 [ ]
判断符号有着严格的格式,空格不能够省略,空格的位置如下(□代表空格)
[□条件□==□条件□]
中间可以是等号也可以是其他比较符号
3.sheel脚本的默认变量。
sehll脚本的文件名字就是 $0 ,在执行该脚本的时候后面跟的参数依次为:$1 $2 $3 ......
$#:代表后接的参数“个数”
$@:代表"$1"、"$2"、"$3",每个变量是独立的(用双引号括起来)
$*:代表““$1c$2c$3””,其中c为分隔字符,默认为空格键。
4.shift 造成参数变量号码偏移
shift 默认偏移一个 ,shift 后也可以接数字, 即出现shift 语句后,变量会去掉前面相对应数字个数的变量。
如 原来变量为 1 2 3 4 5 6 ,出现shift后变成 2 3 4 5 6 ,再出现shift 3 后 ,变成 5 6
5.if...then
if [条件判断式];then
条件成立时执行的句子
fi 反过来写,结束的意思
注意:利用[ ] 写条件判断式的时候需要注意空格不能省略。
if...else
if [条件判断式];then
成立时执行语句
else
条件不成立时执行语句
fi fi不可省略
if [条件判断式1];then
语句1
elif [条件判断式2];then
语句2
else
语句3
fi
6.case....esac
多重判断选择
case $变量名称 in
"第一个变量内容")
执行语句
;;
"第二个变量内容")
执行语句
;;
esac
7.function
function 名字(){
执行语句
}
函数在执行时,也可以后面跟上参数,而这时在函数里面的$#,$@,$*之类的就是后面所跟的参数。
8.for...do...done
for var in con1 con2 con3...
do
执行语句
done
9.for...do...done的另一个写法
for ((初始值;限制值;步进值))
do
执行语句
done
例:计算1+2+。。。
#!bin/bash
s=0<span style="white-space:pre"> </span>#s赋初始值,不能有空格
read -p "input number:" x #x前面有一个空格
for ((i=1;i<=$x;i=i+1))
do
s=$(($s+$i))<span style="white-space:pre"> </span>#$(())格式应该是这样
done
echo "$s"
10.for do done,until do done
for do done
while [条件判断式]
do
执行语句
done 结束语句
until do done
until [条件判断式]
do
执行语句
done 结束语句
11.shell的追踪与调试
sh 后加参数 能够进行调试
-n:不用执行脚本,仅查询语句的问题
-v:再执行脚本前,先将脚本的内容输出的屏幕上
-x:将使用到的脚本内容显示到屏幕上
12.两个整数之间的判定
例如:test n1 -eq n2
-eq 两数值相等(equal)
-ne 两数值不能(not equal)
-gt n1大于n2(greater than)
-lt n1小于n2(less than)
-ge n1大于等于n2(greater than or equal)
-le n1小于等于n2(less than or equal)
13.文件的判断
1.关于文件名的“文件类型”判断
例如:test -e filename(满足条件为真,反之为假)
-e 该文件名是否存在
-f 该文件名是否存在且为文件
-d 该文件名是否存在且为目录
2.关于文件的权限检测
-r 检测该文件是否存在且具有“可读”的权限
-w 检测该文件是否存在且具有“可写”的权限
-x 检测该文件是否存在且具有“可执行”的权限
-u 检测该文件是否存在且具有“SUID”的属性
-g 检测该文件是否存在且具有“SGID”的属性
-k 检测该文件是否存在且具有“Sticky bit”的属性
-s 检测该文件是否存在且为“非空白文件”