1. if 语句的使用
if语句的语法:if [ ! -f "${file}" ]; then
如果有else,为:
if [ ... ]; then
...
elif ...; then
...
else
...
fi
eg: 判断某一个文件是否存在
file="test/1/hello.txt"
if [ ! -f test/1/hello.txt ]; then
# if [ ! -f "${file}" ]; then
echo "file is not exist"
else
echo "file is exist"
fi
注意:
-
表达式和运算符之间要有空格
-
if和[之间也要有空格,for循环一定有空格
-
在比较时,=前后各有一个空格。如果忘记加空格,那就不是比较关系了,而是变成了赋值语句
- 是变量定义的时候变量和=之前不能有空格。eg:
val='expr 2 + 3'
- 是变量定义的时候变量和=之前不能有空格。eg:
字符串比较
进行字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误。
- 双中括号是
Bash
的一个扩展特性。如果出于性能考虑,使用ash或dash来运行脚本,那么将无法使用该特性。
示例:
测试两个字符串是否相同:
[[ $str1 = $str2 ]]
:当str1等于str2时,返回真。也就是说,str1和str2包含的文本是一模一样的。[[ $str1 == $str2 ]]
:这是检查字符串是否相同的另一种写法
2. for语句使用
for循环的正确写法:
for VARIABLE in 1 2 3 4 5 .. N
do
command1
command2
commandN
done
如何使用for遍历一个string字符串:
可以采用如下方法:
pull_project="dependency dependency_arm dependency_ubuntu”
for val in $pull_project; do
echo "$val..."
done
注意: for、do关键字是分开的,如果要把多行写在一起,使用;
分离开。eg:for i in {0..3}; do echo "i = $i" ;done
for index in {0..3}
do
echo "index=$index"
done
- 复杂一点的for
for i in {0..10..2} #bash 4.*以上版本才支持
for i in $(seq 1 2 20) #已经过时的用法,mac下还支持
#语法 (seq start [interval] end),其中的interval是可选的,默认为1
# eg:seq(10 5 20)输出10,15,20,以5为距离,从10开始增加
# seq也支持下面这种写法
END=${#a[@]}
for i in $(seq 1 $END); do echo $i; done
for((c=1; c<= 5; c+=2)) #三个表达式实现一个for循环,是自己熟悉的版本
for (( ; ; )) #无限循环,相当于while(1)