控制流程
条件分支
- 要注意
if后需要有空格分隔,then...fi就像其他编程语言中的大括号,若then写在后面需要在条件测试后需要加一个分号
if [ 条件测试 ]
then
#code
fi
#也可以
if [ 条件测试 ]; then
#code
fi
#配合else
if [ 条件测试 ]
then
#code
else
#code
fi
#配合else if
if [ 条件测试 ]; then
#code
elif [ 条件测试 ]; then
#code
elif [ 条件测试 ]; then
#code
else
#code
if
开关语句
- 匹配项可以有多种形式
a):单个匹配为a字母a|b):匹配a或b- 也可以使用基础命令中的哪些扩展特殊字符,如:
*、?、[]
case $var in #var是变量
match1 ) #code
;; #相当于brack,如果是 ;;& 才是没写brack的效果,若这两种形式都不写则会报错
match2 ) #code
;; #相当于brack
* ) #default,其实使用的是基础命令中扩展的特殊字符中的*号,代表任意匹配
esac
循环
循环中都可以使用brack和conrinue语句
while循环
- 要注意
while后需要有空格分隔,do...done就像其他编程语言中的大括号,若do写在后面需要在条件测试后x需要加一个分号
while [ 条件测试 ]
do
#loop code
done
#也可以
while [ 条件测试 ]; do
#loop code
done
until循环
- 与while循环相反,条件为假时才会循环,为真时跳出循环
until [ 条件测试 ]
do
#loop code
done
#也可以
until [ 条件测试 ]; do
#loop code
done
for...in循环
seq:序列,该命令可以返回一个数字列表,可以用于该类型的循环中的列表- 单个参数:默认从1开始,生成到该参数的数字连序的序列
- 两个参数:第一个参数指定起始位置(可以为负数),第二个参数指定结束位置(可以为负数),生成该范围内数字连序的序列
- 三个参数:第一个参数指定起始位置,第二个参数指定步长,第三个参数指定结束位置,生成该范围内的按照步长的连序序列
for $var in list #var是变量,是将in后的list列表挨个取出赋给var变量,list是 val1 val2 ... 的形式
do #所以遍历数组时需要使用 arr[*] 取出所有元素
#loop code #所以可以使用基础命令中的哪些扩展特殊字符,如{1..5}
done #一些命令也会返回列表形式,如ls,所以可以直接遍历
#也可以
for $var in list; do
#loop code
done
for循环
- 与其他编程语言一样都有相同的for循环结构,只不过是形式不同,是两重小括号
- 这种形式同样可以用于while循环
for ((i=1;i<5;i++))
do
echo $i
done
#也可以
for ((i=1;i<5;i++)); do
echo $i
done
条件测试
条件测试的三种形式
多个测试条件可以使用&&和||来连接,条件测试也可以使用!取反
[ 条件测试 ]:注意方括号两边有空格test 条件测试:test是一个命令[[ 条件测试 ]]:支持正则匹配,等于正则时使用=~号是正则匹配
字符串测试
| 条件测试 | 描述 |
|---|---|
[ str=str ]或[ str==str ] |
相等 |
[ str!=str ] |
不相等 |
[ -z str ] |
空字符串 |
[ -n str ]或[ str ] |
非空字符串 |
整数测试
可以使用(())代替以下的大小判断,比如:((2 > 1)),此时就不需要注意括号两端的空格了,这就更像主流的编程语言了,for和while循环使用该形式也是主要用了(())表达式
| 条件测试 | 描述 |
|---|---|
[ int -eq int ] |
数值相等 |
[ int -ne int ] |
数值不等 |
[ int -le int ] |
数值小于等于 |
[ int -lt int ] |
数值小于 |
[ int -ge int ] |
数值大于等于 |
[ int -gt int ] |
数值大于 |
文件测试
| 条件测试 | 描述 |
|---|---|
[ -e file ] |
文件存在 |
[ -d file ] |
文件存在且是目录 |
[ -f file ] |
文件存在且是普通文件 |
[ -L file ] |
文件存在且是连接文件 |
[ -r file ] |
文件存在且有可读权限 |
[ -w file ] |
文件存在且有可写权限 |
[ -x file ] |
文件存在且有可执行权限 |
[ file1 -nt file2 ] |
file1更新时间更新于file2,或file1存在file2不存在 |
[ file1 -ot file2 ] |
与[ file1 -nt file2 ]相反 |
[ file1 -ef file2 ] |
file1与file2是否互为硬连接 |

Comments NOTHING