本篇文章接上一篇Shell脚本,主要讲shell的控制语句的语法和函数的创建和使用。像其他编程语言一样,shell同样有着自己的语法,跟C语言比起来在语法方面还是有着一些不同之处。
- 控制语句
- if 控制语句
- case 控制语句
- 一些语法
- shell中的判断式
- 整数判断
- 字符串判断
- 逻辑运算
- 文件判断
- 文件权限判断
- 文件时间戳判断
- 循环语句
- while循环
- for循环
- Shell函数
- Shell脚本调用
#1.
if 判断式
then
语句块1;
fi
#2.
if 判断式
then
语句块1
else
语句块2
fi
#3.
if 判断式
then
语句块
elif 判断式
then
语句块
.........
else
语句块
fi
#4.
if 判断式
then
if 判断式
then
if 判断式
then
...
语句块
else
语句块
fi
else
语句块
fi
else
语句块
fi
case 控制语句
#表达式和path匹配则执行相应的语句
#都不匹配则执行 *)下的语句
case 表达式 in
path1)
shell语句
;;
path2)
shell语句
;;
*)
shell语句
;;
esac
一些语法
shell中的判断式
#1. (test 前后需要空格) test 表达式 eg: if test $var -gt $var1 #2. '['和']' 前后需要空格 [ 表达式 ] eg: if [ $var -le $var1 ]整数判断
-eq 等于 # equivalent (英语小白,用于记忆,不对请指正,谢谢) -ne 不等于 # not equal -gt 大于 # greater than -lt 小于 # less than -ge 大于等于 # greater、equivalent -le 小于等于 # less、equivalent eg. if 6 -lt 9 then 语句块 fi字符串判断
if test -z "$str" then fi -z 判断字符串为空,空为真 # zero -n 判断字符串非空,非空为真 # not zero = 判断字符串相等 != 判断字符串不相等 > 判断字符串大于 < 判断字符串小于逻辑运算
&& -a and || -o or ! ! ! C语言条件运算(三目运算)在shell中可以使用逻辑运算的短路法则来实现: [ $var -eq 2 ] && echo "1" || echo "0"文件判断
if test -e filename -e 判断文件是否存在 # exist -s 判断文件是否存在,文件长度大零返真 # size -f 判断文件是否存在,是否为普通文件 # file -d 判断文件是否存在,是否为目录文件 # directory -p 判断文件是否存在,是否为管道文件 # pipe # 创建管道文件 mkfifo filename -c 判断文件是否存在,是否为字符设备 # character -b 判断文件是否存在,是否为块设备文件 # block -L 判断文件是否存在,是否为链接文件 # Link -S 判断文件是否存在,是否为套接字文件 # Socket文件权限判断
if test -w filename -w 可写 -r 可读 -x 可执行文件时间戳判断
if test file1 -nt file2 -nt 判断文件的时间更新 # newer time -ot 判断文件的时间更旧 # older time -ef 判断inode是否一样 # equal file循环语句 while循环
while 表达式 #表达式为逻辑值:true false,或者判断式
do
shell循环体
done
for循环
#1.
for((i = 0; i < 101; i++))
do
循环体;
done
#2.常规写法
for 变量 in 单词列表
do
循环体
done
#注:
#单词列表可以为:
#① 散乱的单词 a b c ac ab cd
#② 连续的数据 {1..100} ,表示1-100
#③ 将 命令置换 的结果作为 单词列表
Shell函数
一般形式
function 函数名(){
函数体
}
# function 为函数固定的标志
# shell 函数没有形参
# shell 函数内部的变量一般为全局变量
# 在变量前面加上 local 就是局部变量
shell函数的调用:
函数名
#或者
函数名 argv[0] argv[1] ...... #命令行参数
$? 可以接收到函数的返回值(0-255)
Shell脚本调用
bash 脚本名 ./脚本名 source 脚本名



