1.8 KiB
1.8 KiB
条件表达式
# 文件比较
-f文件存在, -d目录存在, -e文件或目录存在,-s文件存在且非空, -r文件存在且可读, -w, -x
# 字符串比较
==, =, !=, < , >, -n字符串非空, -z字符串为空, =~正则比较(需要加双层中括号)
# 数字比较
-eq, -ne, -lt, -le, -gt, -ge
# 逻辑运算
-a且,-o或,&&且, ||或, !非
# -a或-o用在[]里
# &&或||用在[[]]里
条件控制
1. if-then-else
# 分行写的格式
if [ 条件1 ];
then 命令1 # 如果条件1为真,则执行命令1
elif [ 条件2 ];
then 命令2 # 如果条件1为假且条件2为真,则执行命令2
else [ 命令3 ] # 如果条件1为假且条件2为假,则执行命令3
fi # fi意为if语句终止
# 写在一行的格式
if [ 1 -ne 0 ]; then echo "not equal"; fi
其中,elif和else为可选项。
2. case
case 值 in
模式1) 命令1
;;
模式2) 命令2
;;
...
*) 命令n
;;
esac
将值和每一个模式匹配,若匹配则执行相应命令不再与其它模式匹配,否则执行星号后的命令。
循环
- for
# 格式一
for 变量名 in 列表
do
命令1
命令2
...
done
# 格式二
for ((i=0; i<10; i++))
do
命令1
...
done
一个for循环的例子
#!/bin/bash
# if a string in file1, then remove it from file2
# $1 : file1
# $2 : file2
for line in `cat $1`
do
b_name=`basename $line`
sed -i "/$b_name/d" $2
done
- until
until 条件
do
命令1
...
done
当条件为真时循环结束,注意测试发生在循环末尾。
- while
while 条件
do
命令1
...
done
-
break
跳出循环或case语句
-
continue
跳过当前循环