Shell编程入门
一,变量赋值及算术运算
// 示例代码:
a=1
echo $a
let b=$a+1
echo $b
c=$[a+b]
echo $c
d=$[c*2]
echo $d
let e=d*2
echo $e
f=$[e%5]
echo $f
// 注意“=”号两边不能有空格
// 以上代码片段将输出:
1
2
3
6
12
2
二,数组
1,赋值
// 示例代码
declare -a arr1=(1 2 3 4)
echo ${arr1[0]}
arr2=("China" "Japan" "Korea")
echo ${arr2[0]}
arr3[0]=100
echo ${arr3[0]}
// 以上代码片段将输出:
1
China
100
2,遍历数组
// 示例代码
arr2=("China" "Japan" "Korea")
for v in ${arr2[@]};do
echo ${v}
done
// 以上代码片段将输出:
China
Japan
Korea
// 注:${arr2[@]}中的@符号表示元素列表
三,条件判断
1,整数比较
-lt,小于
-le,小于等于
-eq,等于
-ge,大于等于
-gt,大于
-ne,不等于
// 示例代码:
a=1
b=2
if [ $a -lt $b ];then
echo "a<b is true"
else
echo "a<b is false"
fi
c=3
if [ $a -lt $b ] && [ $c -gt $b ];then
echo "a<b && c>b is true"
else
echo "a<b && c>b is false"
fi
// 以上代码片段将输出:
a<b is true
a<b && c>b is true
2,字符串比较
s1 = s2
s1 != s2
s1 > s2
s1 < s2
-n s1,s1不为null,长度大于零
-z s1,s1为null,长度为零
// 示例代码:
s1="China"
s2="China"
if [ $s1=$s2 ];then
echo "s1=s2 is true"
else
echo "s1=s2 is false"
fi
// 以上代码片段将输出:
s1=s2 is true
3,文件属性判断
-a file1 :file1 存在
-d file1 :file1存在并是一个目录
-e file1 :file1 存在,同-a
-f file1 :file1 存在并且是一个常规的文件(不是目录或者其他特殊类型文件)
-r file1 :有读的权限
-s file1 :文件存在且不为空
-w file1 :有写的权限
-x file1 :有执行的权限,或者对于目录有search的权限
-N file1 :在上次读取后,文件有改动
-O file1 :own所属的文件
-G file1 :group所属的文件
file1 -nt file2 :file1 比 file2 更新,以最后更新时间为准
file1 -ot file2 :file1 比 file2 更旧 ,以最后更新时间为准
// 示例代码:
if [ -d "/home" ];then
echo "/home dir exists"
else
echo "/home dir not exists"
fi
// 以上代码片段将输出:
s1=s2 is true
/home dir is exists
四,函数定义
函数参数示意:
$0:表示函数名称
$1:第1个参数
$2:第2个参数
// 示例代码:
a=1
function func1() {
local b=2
return $[a+b+$1]
}
func1 3
b=$?
echo $b;
// 以上代码片段将输出:
6
注意:
Shell语言函数返回值不同于传统语言,Shell中的返回值通常是指命令执行后的返回值,成功0,失败1;
以上示例代码中有return语句,说明函数自定义了返回值,所以可以用 $? 查看这个返回值。
a为全局变量,b为局部变量。
五,循环控制
for循环
# 打印1-100之间的数字
for i in {1..100}
do
echo $i
done
# 打印指定的内容
for i in 1 2 3 4 5 a b
do
echo $i
done
# 打印文件列表
for name in `ls *.sh`
do
echo $name
done
# 常规循环 ,注意都是双括号
for(( i=1;i<10;i++ ))
do
if((i%2==0))
then
echo $i
fi
done
while循环
# 普通循环
i=0
while [ $i -le 10 ]
do
let i=$i+1
echo $i
done
# 另一种写法
i=0
while (( i<10 ))
do
let i=$i+1
echo $i
done
# 死循环
i=0
while :
do
echo $i
done