首页 > 系统相关 >Shell编程之条件语句

Shell编程之条件语句

时间:2024-05-28 12:31:18浏览次数:25  
标签:语句 Shell GRADE 编程 echo sh sleep root localhost

一:条件测试操作

1:文件测试

[root@localhost ~]# [ -d /media/cdrom ]              \\-d,测试目录是否存在

[root@localhost ~]# echo $?

0

[root@localhost ~]# [ -d /media/cdrom/Server ]

[root@localhost ~]# echo $?

0

[root@localhost ~]# [ -d /media/cdrom/server ]

[root@localhost ~]# echo $?

1

[root@localhost ~]# [ -d /media/cdrom/server ] && echo "yes"     \\无输出表示不存在

[root@localhost ~]# [ -d /media/cdrom/Server ] && echo "yes"

yes

2:整数值比较

[root@localhost ~]# unum=`who | wc -l`

[root@localhost ~]# [ $unum -gt 5 ] && echo "Too many"

[root@localhost ~]# [ $unum -gt 0 ] && echo "Too many"

Too many

[root@localhost ~]# freecc=$(free -m | grep "Mem" | awk '{print $4+$6}')   \\可用内存空间

[root@localhost ~]# [ $freecc -lt 2048 ] && echo ${freecc}MB          \\小于某值后输出具体的值

1269MB

整数比较:

 -eq:第一个数等于(Equal)第二个数。

-ne:第一个数不等于(Not Equal)第二个数。

 -gt:第一个数大于(Greater Than)第二个数。

 -lt:第一个数小于(Lesser Than)第二个数。

 -le:第一个数小于或等于(Lesser or Equal)第二个数。

 -ge:第一个数大于或等于(Greater or Equal)第二个数。

3:字符串比较

[root@localhost ~]# echo $LANG    \\当前的语言环境

zh_CN.UTF-8

[root@localhost ~]# [ LANG != "en.US" ] && echo "not en.US"      \\字符串比较测试  !=前后有空格

not en.US

[root@localhost ~]# read -p "是否覆盖现有文件(yes/no)?" ACK

是否覆盖现有文件(yes/no)?yes

[root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖"

覆盖

[root@localhost ~]# read -p "是否覆盖现有文件(yes/no)?" ACK

是否覆盖现有文件(yes/no)?no

[root@localhost ~]# [ $ACK = "no" ] && echo "不覆盖"

不覆盖

4:逻辑测试

[root@localhost ~]# uname -r

2.6.32-431.el6.x86_64

[root@localhost ~]# Mnum=$(uname -r | awk -F. '{print $1}')

[root@localhost ~]# Snum=$(uname -r | awk -F. '{print $2}')

[root@localhost ~]# [ $Mnum -eq 2 ] && [ $Snum -gt 4 ] && echo "符合要求"

符合要求

二:使用if条件语句

1:单分支if语句

[root@localhost ~]# vim chkmountdir.sh    \\如果挂在点不存在,自动创建

#!/bin/bash

MOUNT_DIR="/media/cdrom"

if [ ! -d $MOUNT_DIR ]

then

   mkdir -p $MOUNT_DIR

fi

[root@localhost ~]# chmod +x chkmountdir.sh

[root@localhost ~]# ./chkmountdir.sh

[root@localhost ~]# vi /opt/chkifroot.sh     \\判断是否是root,如果不是,没有权限操作

#!/bin/bash

if [ "$USER" != "root" ]

        then

                echo "cuowu,bushi root,quanxian bu zu"

                exit 1

fi

fdisk -l /dev/sda

[root@localhost ~]# chmod +x /opt/chkifroot.sh

[root@localhost ~]# /opt/chkifroot.sh           \\root可以执行

[aaa@localhost root]$ /opt/chkifroot.sh          \\其他用户不可以执行

2:双分支if语句应用

[root@localhost ~]# vi pinghost.sh        \\判断另一主机是否在线

#!/bin/bash

ping -c 3 -i 0.2 -W 3 $1 &> /dev/null

if [ $? -eq 0 ]

then

   echo "Host $1 is up."

else

   echo "Host $1 is down."

fi

[root@localhost ~]# chmod +x pinghost.sh

[root@localhost ~]# ./pinghost.sh 192.168.10.10

Host 192.168.10.10 is up.

[root@localhost ~]# ./pinghost.sh 192.168.10.1

Host 192.168.10.1 is down.

注释:

-c:ping的次数

-i:ping的间隔

-W:超时时间

[root@localhost ~]# vi chkftpd.sh       \\检查vsftpd是否运行

#!/bin/bash

systemctl status vsftpd &>/dev/null

if [ $? -eq 0 ]

then

echo "监听地址:$(netstat -anpt | grep vsftpd | awk '{print $4}')"

echo "进程ID:$(pgrep -x vsftpd)"

else

echo "警告,vsftpd服务不可用"

fi

[root@localhost ~]# chmod +x chkftpd.sh

[root@localhost ~]# ./chkftpd.sh

警告:vsftpd服务不可用!

3:多分支if语句应用

[root@localhost ~]# vi gradediv.sh       \\检查考试成绩是否合格

#!/bin/bash

read -p "请输入您的分数(0-100):" GRADE

if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]

then

   echo "$GRADE 分,优秀"

elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]

then

   echo "$GRADE 分,合格"

else

   echo "$GRADE 分,不合格"

fi

[root@localhost ~]# chmod +x gradediv.sh

[root@localhost ~]# ./gradediv.sh

请输入您的分数(0-100):67

67 分,不合格

[root@localhost ~]# ./gradediv.sh

请输入您的分数(0-100):78

78 分,合格

[root@localhost ~]# ./gradediv.sh

请输入您的分数(0-100):90

90 分,优秀

更多分支

[root@localhost ~]# vi gradediv.sh

#!/bin/bash

read -p "请输入你的成绩" GRADE

if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]

then

echo "$GRADE分,成绩优秀"

elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]

then

echo "$GRADE分,合格"

elif [ $GRADE -ge 0 ]&& [ $GRADE -le 69 ]

then

echo "不及格"

else

echo "输入错误"

fi

三、使用case分支语句

1:编写检查用户输入的字符类型的脚本

[root@localhost ~]# vim hitkey.sh

#!/bin/bash

read -p "请输入一个字符,并按Enter键确认:" KEY

case "$KEY" in

  [a-z]|[A-Z])

      echo "您输入的是 字母."

      ;;

  [0-9])

      echo "您输入的是 数字."

      ;;

  *)

      echo "您输入的是 空格、功能键或者其他控制字符."

esac

[root@localhost ~]# chmod a+x hitkey.sh

测试并确认执行结果

[root@localhost ~]#./hitkey.sh

请输入一个字符,并按Enter键:k

您输入的是 字母 k.

......

2:编写系统服务脚本

[root@localhost ~]# vim myprog

#!/bin/bash

case "$1" in

start)

   echo -n "正在启动sleep服务..."

   if sleep 7200 &

 then

      echo "ok"

   fi

   ;;

stop)

   echo -n "正在停止sleep服务..."

   pkill "sleep" &> /dev/null

echo "ok"

   ;;

status)

   if pgrep "sleep" &> /dev/null ; then

      echo "sleep服务已经启动."

   else

      echo "sleep服务已经停止."

   fi

   ;;

restart)

   $0 stop

   $0 start

   ;;

*)

   echo "用法:$0 {start|stop|status|restart}"

esac

[root@localhost ~]# chmod a+x myprog

测试并确认执行结果

[root@localhost ~]#./myprog start

正在启动sleep服务...ok

[root@localhost ~]#./myprog status

sleep服务已经启动。

[root@localhost ~]#./myprog stop

正在停止服务sleep服务...ok

[root@localhost ~]#./myprog reload

用法:./myprog {start|stop|status|restart}

将myprog脚本添加为标准的系统服务

[root@localhost ~]# vim myprog

#!/bin/bash

# chkconfig: - 90 10

# description: Startup script for sleep Server

case "$1" in

start)

   echo -n "正在启动sleep服务..."

   if sleep 7200 &

 then

      echo "ok"

   fi

   ;;

stop)

   echo -n "正在停止sleep服务..."

   pkill "sleep" &> /dev/null

echo "ok"

   ;;

status)

   if pgrep "sleep" &> /dev/null ; then

      echo "sleep服务已经启动."

   else

      echo "sleep服务已经停止."

   fi

   ;;

restart)

   $0 stop

   $0 start

   ;;

*)

   echo "用法:$0 {start|stop|status|restart}"

esac

[root@localhost ~]# cp myprog /etc/init.d/

[root@localhost ~]# chkconfig --add myprog

[root@localhost ~]# chkconfig --list myprog

[root@localhost ~]# service myprog start

备注:

# chkconfig: - 90 10

90是启动优先级,10是停止优先级,优先级范围是0-100,数字越大,优先级越低。

标签:语句,Shell,GRADE,编程,echo,sh,sleep,root,localhost
From: https://blog.csdn.net/weixin_71499831/article/details/139234491

相关文章

  • Shell编程循环语句与函数
    Shell编程之循环语句与函数目录1.1for循环语句1.1.1for语句的结构1.1.2for语句应用示例1.2while循环语句1.3until循环语句1.3.1until语句的结构2.1Shell函数2.1函数应用示例2.2函数的作用范围2.3函数的参数2.4递归函数3.1Shell数组3.2Shell脚本测试一、循......
  • 【微机原理及接口技术】可编程并行接口芯片8255A
    【微机原理及接口技术】可编程并行接口芯片8255A文章目录【微机原理及接口技术】可编程并行接口芯片8255A前言一、8255A的内部结构和引脚1.与外设接口(数据端口)2.与处理器接口二、8255A的工作方式三、8255A的编程1.写入方式控制字:控制字格式2.读写数据端口3.读写端......
  • Java网络编程
    Java网络编程是Java编程中一个非常重要的领域,它为程序员提供了构建网络应用程序的能力。在当今互联网时代,网络应用程序无处不在,从简单的客户端-服务器通信到复杂的分布式系统,Java网络编程都扮演着关键角色。网络模型在探讨Java网络编程之前,让我们先了解一下计算机网......
  • 打开编程世界 跟着Mr.狠人一起学C/C++
    打开编程世界跟着Mr.狠人一起学C/C++自我介绍大家好,我是Mr.狠人。我高中就读于墨尔本,学习的方向是会计,因为疫情我回到国内读大学,大学的专业是国贸,可以说我没有任何的计算机基础。但我在海外研究生阶段毅然决然的选择了计算机专业,我本可以选择金融专业,或是更简单的管理专业......
  • 数据库初始,SQL语句介绍,MySQL数据库安装,SQL语句基础,操作MySQL数据库
    Ⅰ数据库初识【一】存储数据的演变过程【1】文件基于内存保存在早期,随意地存放到一个文件中、数据格式也是千差万别的,完全取决于个人员工管理系统是基于列表或字典(内存)存储数据【2】文件操作用本地的文本文件存储数据有的人喜欢存储到本地的一个文件中有的人喜欢存......
  • 小阿轩yx-Shell 编程规范与变量
    小阿轩yx-Shell编程规范与变量Shell脚本概述可以批量处理自动化地完成一系列维护任务大大减轻管理员的负担Shell的作用 命令解释器,翻译官,介于系统内核与用户之间,负责解释命令行用户登录Shell登录后默认使用的Shell程序,一般为/bin/bash不同Shell的内部指令、运行环境......
  • 关于软件开发模型(什么是结对编程?)
    结对编程是敏捷软件开发中的一种方法,它涉及两个程序员在同一台计算机上共同工作。这种方法的核心在于两个人的紧密协作,通常由一人负责输入代码,而另一人则审查这些代码,确保其正确性和可读性。结对编程它通过促进程序员之间的紧密合作,不仅提高了代码质量,还增强了团队的协作能力和适......
  • 编程语言和编程工具
    我了解和使用一些编程语言和编程工具编程语言:1.Java:Java是一种跨平台的面向对象编程语言,具有强大的生态系统和丰富的开发工具,适用于大型企业级应用和分布式系统开发2.C:C语言作为一种通用的、高效的编程语言,具有广泛的应用领域和良好的性能表现,但在使用时需要注意安全性和复杂......
  • 系统编程练习题----使用消息队列实现两个进程之间的通信
    目录题目思路代码展示进程A进程B结果展示题目要求进程A创建一条消息队列之后向进程B发送SIGUSR1信号,进程B收到该信号之后打开消息队列并写入一段信息作为消息写入到消息队列中,要求进程B在写入消息之后,发SIGUSR2信号给进程A,进程A收到该信号则从消息队列中读取消息并输出消息正文......
  • [Java EE] 网络编程与通信原理(三):网络编程Socket套接字(TCP协议)
    ......