上一篇:https://blog.csdn.net/jiachanghui007/article/details/105616317
讲过上一篇的shell介绍,相信对shell有了最基本的认识。本篇主要介绍分支控制,循环控制语法。
在此之前,先提两个shell变量的注意点:
①变量赋值时,“=”左右两边不能有空格;
②BASH中的语句结尾不需要分号;
分支控制,基本结构:
①
if[expression]
then
#code block
fi
②
if[expression]
then
#code block
else
#code block
fi
③
if [expression]
then
#code block
else if [expression]
then
#code block
else
#code block
fi
fi
注意:else if 和 elif 等价;每个if对应一个fi
比较:
比较操作 |
整数操作 |
字符串操作 |
相同 |
-eq |
= |
不同 |
-ne |
!= |
大于 |
-gt |
> |
小于 |
-lt |
< |
大于或等于 |
-ge |
|
小于或等于 |
-le |
|
为空 |
-z |
|
不为空 |
-n |
|
例如:比较整数a和b是否相等: if [ $a = $a ]
判断整数a是否大于整数b: if [ $a -gt $b ]
if [ $a > $b ]
注意:1、在“[”和“]”符号的左右都留有空格;
- “=”左右都有空格;
判断
-e 文件已经存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
例:test5
#!/bin/sh
folder=/home
[ -r “$folder” ] && echo “can read $folder”
[ -f “$folder” ] || echo “this is not file”
For循环
for循环结构与C语言中有所不同,在BASH中for循环的基本结构是:
for var in [list]
do
#code block
done
其中$var是循环控制变量,[list]是var主要遍历的一个集合,do/done对包含了循环体,相当与C语言中的一对大括号。另外如果do和for被写在同一行,必须在do前面加上”;”。如: for $var in [list] ;do
例:test6
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat
do
echo $day
done
如果列表被包含在一对双引号中,则被认为是一个元素。如test8:
#!/bin/bash
for day in “Sun Mon Tue Wed Thu Fri Sat”
do
echo $day
done
For循环(注意):
上面的例子中,在for所在的那行,变量day是没有加”$”符合的,而在循环体内,echo所在行变量$day是必须要加上“$”符合的。
while循环
基本结构:
while [ condition ]
do
#code block
done
until循环
基本结构
until [ condition ]
do
#code block
done
while 和 until 的区别:
while 和 until 的区别在于 while是为真时执行,until是为假时执行。
case语句:
基本结构:
case “$var” in
condition 1)
;;
condition 2)
;;
*)
default statments;;
esac
例 test7:
#!/bin/bash
echo “Hit a key,then hit return.”
read keypress
case “$keypress” in
[ A-Z ]) echo “Uppercase letter”;;
[ a-z ]) echo “Lowercase letter”;;
[ 0-9 ]) echo “Digit”;;
*) echo “Punctuation,whitespase,or other”
esac
以上就是基本的控制逻辑语法。内容都是手敲的。感兴趣自己实验。如有问题,欢迎私聊或留言!