IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Shell编程之条件语句 -> 正文阅读

[系统运维]Shell编程之条件语句

目录

一、条件判断的两种方式

1.1 test

1.2 中括号

1.3?文件测试操作符

二、整数值比较

?三、字符串比较

四、逻辑测试

五、三元运算符

六、if语句

6.1?案例1

?6.2 单分支案例2

?6.3 双分支案例3

?6.4 多分支案例4

?七、case语句

?7.1 案例case并行判断

?八、总结

8.1 定义一个变量的方法

8.2 浮点数的运算


一、条件判断的两种方式

1.1 test

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

test 命令期望在命令行中找到一个参数,当 shell 没有为变量赋值时,则将该变量视为空。这意味着在处理脚本时,一旦脚本寻找的参数不存在,则 test 将报告该错误。

test [操作符选项] 表达式

1.2 中括号

[ 操作符选项 表达式 ]

[ -f /opt/abc.txt ]

注意[]空格,否则会失败

测试是否成功使用返回值

boole

true(真)

false(假)

使用场景

返回码

0

非0

Linux系统 shell脚本

1

0

Java C

1.3?文件测试操作符

-e

测试指定的文件或者目录是否存在

-f

测试指定对象是否为文件;指定的文件是否存在

-d

测试指定的对象是否为目录;指定的目录是否存在

-r

测试指定用户是否有读权限

-w

测试当前用户是否有写权限

-x

测试当前用户是否有执行权限

-L

测试文件是否为符号链接(软链接文件)

二、整数值比较

操作符

-eq

等于

==

-gt

大于

\>

-lt

小于

\<

-ge

大于等于

-le

小于等于

-ne

不等于

!=

[ 整数变量1 操作符 整数变量2]

一般是字符表达式,很少用符号表达式,会有问题

?三、字符串比较

[ 字符窜1 = 字符窜2 ] 或者 [ 字符窜1 == 字符窜2 ] 判断是否相同

[ 字符窜1 != 字符窜2 ] 判断是否不相同

##################################

[ -z "字符串" ] -z:判断字符串是否为空;或者指定的变量是否为空值

[ -n “字符串” ] -n:检查是否有字符串存在

?

?注:如果测试的字符串是变量,我们一般加上双引号,防止产生歧义

四、逻辑测试

-a ????????&& ????????且? ?前后条件都要成立

-o ????????||? ? ? ? ?? 或? ? 只需前后条件中一个成立

[ 表达式1 ] && [ 表达式2 ] ????????等同于???????? [ 表达式1 -a 表达式2 ]? ?[[ 表达式1 && 表达式2 ]]

[ 表达式1 ] || [ 表达式2 ]? ? ? ? ? ? 等同于???????? [ 表达式1 -o 表达式2 ]? ?[[ 表达式1 || 表达式2 ]]

五、三元运算符

#Java  c
条件表达式?a:b
当表达式为真时,取a值;当表达式为假时,取b值
#shell
[ 表达式 ] && a || b  等价于if双分支
[ 表达式 ] && a    等价于if单分支

类似if语句

六、if语句

#单分支
if[ 表达式 ];then
 ...
fi

#双分支
if [ 表达式 ];then
 ...
else
 ...
fi

6.1?案例1

[root@localhost/data/sh]# vim ping.sh

#!/bin/bash
#判断主机是否存活
#ping -c 3 -i 0.5 -w 2 $1 &> /dev/null && echo "$1 is online" || echo "$1 is offline"
#发三个包,每隔5秒,注释的为三元运算符方法
ping -c 3 -i 0.5 -w 2 $1 &> /dev/null
if [ $?-eq 0 ];then 
    echo "$1 is online"
else
    echo "$1 is offline"
fi

?6.2 单分支案例2

?磁盘空间已用大于80%报警

#!/bin/bash
#磁盘空间已用大于80%报警 
USED=$(df |grep /dev/mapper/centos-root | awk '{print $5}'|awk -F '%' '{print $1}')
#将取到的值赋给USED
if [ $USED -gt 40 ];then
#为了方便演示,改为40
        echo "警告!当前/目录的磁盘使用率超过为$USED%"
fi

?6.3 双分支案例3

[root@localhost/data/sh]# vim netstat.sh

#!/bin/bash

netstat -natp |grep :80 &> /dev/null
#查看端口
if [ $? -eq 0 ]
then
        echo "网站服务已在运行!"
else
        if rpm -q httpd &> /dev/null
        #查看软件是否安装
        then
                echo "正在启动httpd服务"
                systemctl start httpd
        else
                echo "正在安装并启动httpd服务"
                yum install -y httpd &> /dev/null && systemctl start httpd &> /dev/null
        fi
fi

?6.4 多分支案例4

#!/bin/bash
read -p "请输入你的考试分数:" grade

if [ $grade -ge 85 ]&& [ $grade -le 100 ]
then
    echo "你的成绩为$grade"
    echo "你的成绩为优秀"

elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
then
    echo "你的成绩为$grade"
    echo "你的成绩为良好"
elif
[ $grade -ge 60 ]&&[ $grade -le 69 ]
then
    echo "你的成绩为$grade"
    echo "你的成绩为合格" 
else
    echo "你的成绩为$grade"
    echo "你的成绩不合格"
fi

?七、case语句

if的多分支是逐条判断,相对而言效率会低一些,而case语句,不满足的条件直接跳过,相对执行效率快一些

?7.1 案例case并行判断

[root@localhost/data/sh]# vim case.sh

#!/bin/bash
#判断分数等级
read -p "请输入你的分数:(0-100)" num

case $num in

100)
        echo "恭喜你获得$num 分"
;;

[89][0-9])
#80-99
        echo "优秀!获得$num 分"
;;

[67][0-9])
#60-79
        echo "获得$num 分继续努力" 
;;

[0-9] | [1-5][0-9])
#0-59
        echo "继续努力!获得$num 分"
;;

*)
        echo "输入有误,请重新输入"
esac

?八、总结

8.1 定义一个变量的方法

1.read -p 执行时显示提示信息变量名

2.变量名=变量值

export +变量名 生成为全局变量

8.2 浮点数的运算

echo "浮点运算字符串” Ibc

awk 'BEGIN{print 浮点运算字符串}’

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:29:31  更:2022-05-07 11:29:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:40:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码