一、条件测试

test命令
测试表达式是否成立,若成立返回0,否则返回其他数值

格式1: test 条件表达式
格式2: [ 条件表达式 ]

1.文件测试

[ 操作符 文件或目录 ]

常用的测试操作符

-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-L:测试是是否为符号链接

2.整数测试

[ 整数1 操作符 整数2 ]

常用的测试操作符

-eq:等于(Equal)             ==
-ne:不等于(Not Equal)       !=
-gt:大于(Greater Than)      \>
-|t:小于(Lesser Than)       \<
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)

( (4>5) ) && echo true || echo false
[[4/>5]] && echo true || echo false
查看空闲内存是否< 1024MB
FreeAA=$(free -m | grep "Mem: " | awk ‘{print $4}’)
[ $FreeAA -It 1024 ] && echo ${FreeAA}MB

3.字符串测试

格式1
[ 字符串1 = 字符串2]
[ 字符串1 != 字符串2 ]

格式2
[ -z 字符串 ]

常用的测试操作符

=  :字符串内容相同
!= :字符串内容不同,!号表示相反的意思
-z :字符串内容为空
-n :字符串是否存在

在这里插入图片描述

4.逻辑测试

格式1: [ 表达式1 ] 操作符 [ 表达式2 ] …
格式2: 命令1 操作符 命令2 …

常用的测试操作符
-a或&&: 逻辑与,“而且”的意思,前后条件需都成立
-o或||: 逻辑或,“或者”的意思,只需前后条件中个成立
!: 逻辑否

二、if语句

1.if单分支语句

if 条件测试操作
then
命令序列
fi

if [ 10 -gt 5 ]
then
   echo "yes"
fi

if [ 10 -gt 5 ];then echo"yes"; fi

[ 10 -gt 5 ] && echo "yes"

在这里插入图片描述

2.if双分支语句

if 条件测试操作
then 命令序列1
else 命令序列2
fi

if [ $1 -gt 5 ]
then
   echo "yes"
     else [ $1 -eq 5 ]
fi

在这里插入图片描述

3.if多分支语句

if  条件测试操1
  then 命令序列1
elif 条件测试操作2
  then 命令序列2
else
命令序列3 
fi

在这里插入图片描述

三、case分支语句

case 变量值 in
模式1)
命令序列 1
;;
模式2)
命令序列 2 
;;
*)
默认命令序列
esac

作业

1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
[ -e ~/test.sh -a -x ~/test.sh ]
[[ -e ~/test.sh && -x ~/test.sh ]]
在这里插入图片描述

2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

vim baimi.sh

#!/bin/bash
read -p "输入100米赛跑秒杀:" boerte

if [ $boerte -gt 0 ] && [ $boerte -le 10 ]
then

 {
   read -p "请输入性别:" nn

if [ $nn = 男 ]
  then
  echo "男生组"

 elif [ $nn = 女 ]
  then
  echo "女生组"

 else
  echo "输入错误"
fi
}

elif [ $boerte -gt 10 ]
  then
  echo "淘汰"
else
  echo "重新输入"
fi

在这里插入图片描述

3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录cx
vim jieya1.sh

#!/bin/bash
read -p "请输入软件包名称:" jieya

case $jieya in

   *[g][z] )
            tar zxvf $jieya -C /opt
    ;;
   *[z][2] )
            tar jxvf $jieya -C /opt
    ;;
    *)
            echo "请输入正确格式(gz/bz2)!"
    ;;
esac

在这里插入图片描述

4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。

#!/bin/bash

read -p "请输入数值" ss

if [ $ss = `awk "BEGIN {print $ss}" | awk -F '.' '{print $1}'` ]
then
echo "是" 

else
echo "否"
fi

在这里插入图片描述

5.根据上一题再判断输入的内容是奇数还是偶数。

#!/bin/bash

read -p "请输入数值" ss

if [ $ss = `awk "BEGIN {print $ss}" | awk -F '.' '{print $1}'` ]
then
{
if [ `expr $ss % 2` = 0 ]
  then
  echo "偶数"

else
  echo "奇数"
fi
}
else
echo "不是整数"
fi

在这里插入图片描述

6.用if 语句判断主机是否存活

#!/bin/bash

read -p "请输入主机IP:" a

if ping -c 3 -i 0.5 -w 2 $a &> /dev/null
then
echo "$a 已运行"

else
echo "$a 不在运行中"
fi

7.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中
使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,
要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐