美文网首页
Shell | 控制流

Shell | 控制流

作者: shwzhao | 来源:发表于2021-06-07 10:10 被阅读0次
  1. 条件测试
    1.1 数值大小测试
    1.2 字符串测试
    1.3 文件测试
    1.4 逻辑操作符
  2. 判断
  3. 循环
    3.1 continue 空过本轮循环
    3.2 break 断掉循环

1. 条件测试

条件表达式和左右方括号之间都必须有一个空格。

1.1 数值大小测试

[ $a -eq 2 ] # 比较$a是否等于2。 -eq: equal 

-ne: not equal
-gt: greater than
-lt: less than
-ge: greater than or equal
-le: less than or equal

$ i=10;j=100
$ if [ $i -gt $j ];then echo "$i > $j";else echo "$i < $j";fi
10 < 100

1.2 字符串测试

test $a #判断字符串是否为空
test $a = $b # 判断两个字符串是否相等
test $a != $b # 判断两个字符串是否不相等
[ -n $i ] # -n: 判断字符串是否是非空串
[ -z $j ] # -z: 判断字符串是否是空串

1.3 文件测试

[ -a file ] #文件是否存在

-e: 同 -a
-d: 文件是否为目录
-s: 文件是否为非空文件
-w: 文件是否可写
-r: 文件是否可读
-x: 文件是否可执行

[ -a $input ] || echo "file does not exist" && exit

在 Shell 脚本的参数判定中挺实用的。

1.4 逻辑操作符

[ ! -a file ] #!: 逻辑非。文件是否不存在
test -a file -a -d file #-a: 逻辑与。判断:file是否存在且为目录
[ $a -eq 0 -o $a -eq 1 ] #-o: 逻辑或。判断:整数是否等于0或1

!: 逻辑非
-a: 逻辑与,and
-o: 逻辑或,or

注意文件测试的 -a,与逻辑与 -a 的区别。

2. 判断

for i in `seq 10`
do
    if [ $i -lt 3 ]
        then
        echo "ok"
    elif [ $i -lt 6 ]
        then
        echo "good"
    elif [ $i -lt 9 ]
        then
        echo "excellent"
    else
        echo "perfect"
    fi
done
ok
ok
good
good
good
excellent
excellent
excellent
perfect
perfect

3. 循环

3.1 continue 空过本轮循环

for i in `seq 5`
do
    if [[ $i -eq 3 ]]
    then continue
    fi
    echo $i
done
1
2
4
5

3.2 break 断掉循环

for i in `seq 5`
do
    if [[ $i -eq 3 ]]
    then break
    fi
    echo $i
done
1
2

相关文章

网友评论

      本文标题:Shell | 控制流

      本文链接:https://www.haomeiwen.com/subject/sipgaktx.html