美文网首页
六、Shell流程控制-if判断语句

六、Shell流程控制-if判断语句

作者: 一个反派人物 | 来源:发表于2021-01-10 10:32 被阅读0次

1. shell中的运算

1.1 数学比较运算

-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于等于
-ge 大于等于

浮点数的比较建议将数字等比放大至整数进行比较,例如

#比较1.5和2的大小
test `echo 1.5*10|bc|awk -F "." '{print $1}'` -lt  $((2*10))

1.1.1 借助expr判断是否是整数

expr 1 + $NUM
[ $? - ne 0 ] && echo "$NUM 不是整数"

1.2 多整数比较

-a and
-o or

#与
[ 10 -eq 10 -a 10 -gt 100 ] ; echo $?
1
#或
[ 10 -eq 10 -o 10 -gt 100 ] ; echo $?
0

1.3 文件比较运算

-d 检查目录是否存在
-e 检查文件或目录是否存在
-f 检查文件是否存在
-r 检查文件是否存在且可读
-s 检查文件是否存在且不为空
-w 检查文件是否存在且可写
-x 检查文件是否存在且可执行
-O 检查文件是否存在且被当前用户拥有
-G 检查文件是否存在且默认组为当前组
file1 -nt file2 检查file1是否比file2新,比较mtime
file1 -ot file2 检查file1是否比file2旧,比较mtime
file1 -ef file2 检查file1是否比file2是否有相同的inode

常用案例:

#先判断文件存在,再进行调用
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
#先判断目录是否存在,再新建目录
[ -d /backup ] || mkdir /backup

1.4 字符串比较运算

== 等于
!= 不等于
-n (not zero)检查字符串是否不为空
-z (zero)检查字符串是否为空

# 判断变量a是否为空
if [ -z $a ]

1.5 逻辑运算

&& 逻辑与运算
|| 逻辑或运算
! 逻辑非运算

1.6 正则比较

正则比较需要使用[[ ]]符号
=~ 正则匹配
! 取反,需要放在整体表达式前面

[[ ! $USER =~ ^b ]] ;echo $?

正则匹配常用于判断是否是整数:

[[ $INPUT =~ ^[0-9]+$ ]]

2. if语句

[ condition ]可以由多个条件使用||&&拼接
例如:

#只要一个条件为真就行
if [ $var1 -lt 1 ] || [ $var2 -gt 2 ]
#必须所有条件为真
if [ $var1 -lt 1 ] && [ $var2 -gt 2 ] && [ $var3 -lt 10 ]

[ condition ]还可以是一段命令,如果命令执行成功为true,否则为false
例如:

#如果php安装成功就执行后面语句
if yum -y install php 1>/dev/null;then
#如果php安装不成功就执行后面语句
if ! (yum -y install php 1>/dev/null);then

2.1 单if语句

适用范围:只需一步判断,条件返回真干什么
语法:

if [ condition ]   #condition为true或false,[]与condition中间有空格
  then
    command
fi

例子:

#如果/tmp/abc目录不存在,就创建目录
#!/bin/bash
if [ ! -d /tmp/abc ]
   then
     mkdir /tmp/abc
     echo "create dir /tmp/abc"
fi

2.2 if-then-else语句

适用范围:两步判断,条件为真干什么,条件为假干什么

if [ condition ]
  then
    command1
else
    command2
fi 

例子:

#如果用户是root,输出"管理员,你好",否则输出"Guest,你好"
#!/bin/bash
if [ $USER == 'root' ]
  then
    echo "管理员,你好"
else
    echo 'Guest,你好'
fi

2.3 if-then-elif-then-else语句

适用范围:多于两个以上的判断结果

if [ condition1 ]
  then
    command1
elif [ condition2 ]
  then
    command2
......
else
    commandx
fi 

例子:

#给脚本传入两个整数,输出比较结果
#!/bin/bash
if [ $1 -gt $2 ]
  then
    echo "$1>$2"
elif [ $1 -eq $2 ]
  then
    echo "$1=$2"
else
    echo "$1<$2"
fi

3. if高级应用

3.1 条件符号使用(( ))植入数学表达式

在数学表达式中,使用的是传统的比较运算符 >、>=、==、<、<=、!=
例子:

#判断(5+4)*10>89
#!/bin/bash
if (( (5+4)*10>89 ))
  then
    echo "yes"
else
    echo "no"
fi

3.2 条件符号使用[[ ]]在条件中使用通配符

例子:

#打印r开头的字符串
#!/bin/bash
for var in r1 r2 a ab c
do
  if [[ $var == r* ]]
    then
      echo $var
  fi
done

相关文章

网友评论

      本文标题:六、Shell流程控制-if判断语句

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