shell脚本基本语法(3)
流程控制语句
if
条件语句
if语句的格式如下:
# 格式1
if 条件
then
代码块
fi
# 格式2
if 条件; then
代码块
fi
# 格式3
if 条件; then
代码块1
else
代码块2
fi
# 格式4
if 条件; then
代码块1
elif 条件; then
代码块2
elif 条件; then
代码块n
else
代码块n+1
fi
for
循环语句
for循环语句的格式如下:
# 格式1,shell风格
for arg [in list]
do
命令
done
# 格式2,c风格
for((表达式1;表达式2;表达式3))
do
echo $i
done
while
循环语句
while循环语句的格式如下:
# 格式1,shell风格
while[条件]
do
命令
done
# 格式2,c风格
while((表达式))
do
命令
done
until
循环语句
until循环语句的条件为假时反复运行,直到条件变为真才结束。格式如下:
# 格式1,shell风格
until[条件]
do
命令
done
# 格式2,c风格
until((表达式))
do
命令
done
循环语句中,可以使用break
和continue
跳出循环。
case
分支语句
case分支语句的格式如下:
case "$var" in
"$cond1")
命令
;;
"$cond2")
命令
;;
*)
命令
;;
esac
可以使用通配符*
默认条件。类似c语言里,switch语句的default。
条件测试
文件测试条件
-e
文件存在-f
普通文件 eg:[-f ~/.profile]
-s
文件长度不为0-d
文件是目录-b
文件是块设备文件。-c
文件是字符设备-p
文件是管道-h/-L
文件是符号连接-S
文件是Socket-t
是一个关联到终端的文件描述符。(一般用来检测在一个给定脚本中的stdin[-t0]
或者[-t1]是否是一个终端)-r
文件可读-w
文件可写-x
文件可执行-g
文件有SGID标识 eg:[-g /bin/su]
-u
文件有SUID标识 eg:[-u /usr/bin/sudo]
-k
具有粘滞位。eg:[-k /tmp]
-O
测试文件拥有者-G
文件组ID与测试者相同-N
从文件最后被阅读到现在,是否被修改过。-f1 -nt f2
f1文件较新 eg:[~/.profile -nt ~/.bashrc]
-f1 -ot f2
f1文件较旧-f1 -ef f2
两个文件是同一个文件的硬连接!
反转以上测试结果,若没有条件则返回true.
整数比较
-eq
等于 eg:["$m" -eq "$n"]
-ne
不等于-gt
大于-ge
大于等于-lt
小于-le
小于等于<
小于 eg:(("$m" < "$n"))
<=
小于等于>
大于>=
大于等于
字符串比较
=
相等 eg:["str1" = "$str2"]
!=
不相等>
小于-z
长度为0-n
长度不为0
混合比较
test支持多个表达式之间进行逻辑运算然后得到一个真值。
-a
与运算 eg:["$1" -ge 0 -a "$1" -le 100]
-o
或运算 eg:["$1" -ge 0 -o "$1" -le 100]
关于技术交流
此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。