shell编程二-结构化命令

shell编程二-结构化命令

一、if语句

if command
then
    commands
fi

if判断的并不是一个比值的对错,而是一个命令,命令执行成功退出码为0即为true。例如:

#!/bin/bash
if pwd
then
    echo "pwd执行正确"
fi

if-else语句

if command
then
    commands
else
    commands
fi
if command1
then
    commands
elif command2
then
    commands
fi

二、 条件判断 test

除了命令判断,常用如字符串比较,数字比较等判断,可用test
test比较:数字比较,字符串比较,文件比较

写脚本是,不用写test,可以用[]代替,但注意空格:

if [ condition ]
then
    commands
fi

数字比较:

比较 描述
n1 -eq n2 是否相等
n1 -ge n2 是否大于或等于
n1 -gt n2 是否大于
n1 -le n2 是否小于等于
n1 -lt n2 是否小于
n1 -ne n2 是否不等于

字符串比较:

比较 描述
str1 = str2 是否相同
str1 != str2 是否不同
str1 < str2 是否小于
str1 > str2 是否大于
-n $var 判断变量是否长度非0
-z $var 判断变量是否长度为0

注: 大小于需要转义

文件比较

比较 描述
-d file 是否存在file目录
-e file 是否存在file
-f file 是否存在file文件
-r file file存在并可读
-s file file存在并非空
-w file file存在并可写
-x file file存在并可执行

复合条件测试

[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]

双括号高级比较

(( expression ))

#!/bin/bash
var1=10
if (( $var1 ** 2 > 90 ))
then
        echo "10的平方大于90:判断正确"
else
        echo "判断错误"
fi

双括方括号

[[ expression ]]
可以使用双方括号做模式匹配

如,有java项目包名为app.1.0-NAPSHOT.jar,现在需要判断是不是快照版本,可以如下判断:

if [[ "${PROJECT_NAME}" =~ -servlet$ ]]
then
    echo "项目是快照版本"
fi

三、 case

语法结构
>case var in
> pattern1 | pattern2) commands1;;
> pattern3) commands2;;
> *) default commands;;
> esac

CONTENTS