【linux 脚本篇】流程控制语句-case

这篇具有很好参考价值的文章主要介绍了【linux 脚本篇】流程控制语句-case。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【linux 脚本篇】流程控制语句-case

目录

🍁案例一:菜单选项

🍂if语句执行

🍂case语句执行

🍁案例二:rsync服务脚本

🍂if语句执行

🍂case语句执行

🍁案例三:nginx服务脚本

🍁案例四:实现系统工具箱

🍁案例五:实现简单的jumpserver跳板机


    🦐博客主页:大虾好吃吗的博客

    🦐专栏地址:Linux从入门到精通

        用来实现程序流程的选择、循环等进行控制,类似于if,但更具准确性,一般用于服务的启动、停止脚本。

语法格式如下:

case 变量 in
    变量1)
        命令序列1;;
    变量2)
        命令序列2;;
    变量3)
        命令序列3;;
esac

        这种语句,需要做大量的练习,下面来几个案例,其他的可以在网上搜。为了区分if和case的区别,下面案例使用两种语法实现。

案例一:菜单选项

        实现方法分别用if语句和case语句展示,先来看看if语句是怎么实现的吧。

if语句执行

        下面使用了多分支if语句,来判断123,但是这种语法不够精确。可以加入更多的正则表达式,来增加精确性,但是这样不太实用,我们的理念是用最少的语法命令,做更多更便捷的事。

[root@daxia ~]# vim if1.sh
#!/bin/bash
cat << EOF
=========+
1.backup |
2.copy   |
3.quit   |
=========+
EOF
read -p "请输入你的选项[1|2|3]:" as
​
if [ ${as} -eq 1 ];then
    echo "==backup=="
elif [ ${as} -eq 2 ];then
    echo "==copy=="
elif [ ${as} -eq 3 ];then
    echo "==quit=="
else
    echo "已退出;请输入[1|2|3]"
fi

执行脚本测试

[root@daxia ~]# sh if1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:1
==backup==
[root@daxia ~]# sh if1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:2
==copy==
[root@daxia ~]# sh if1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:3
==quit==
[root@daxia ~]# sh if1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:4
已退出;请输入[1|2|3]

case语句执行

#!/bin/bash
cat <<EOF
=========+
1.backup |
2.copy   |
3.quit   |
=========+
EOF
​
read -p "请输入你的选项[1|2|3]:" as
​
case ${as} in
    1)
    echo "==backup=="
    ;;
    2)
    echo "==copy=="
    ;;
    3)
    echo "==quit==" && exit
    ;;
    *)
    echo "警告!!!!"
    echo "执行${0}后,请输入 {1|2|3}"
    exit
esac
[root@daxia ~]# vim case1.sh
#!/bin/bash
cat <<EOF
=========+
1.backup |
2.copy   |
3.quit   |
=========+
EOF
​
read -p "请输入你的选项[1|2|3]:" as
​
case ${as} in
    1)
    echo "==backup=="
    ;;
    2)
    echo "==copy=="
    ;;
    3)
    echo "==quit==" && exit
    ;;
    *)
    echo "!!!!大虾警告!!!!"
    echo "执行${0}后,请输入 {1|2|3}"
    exit
esac

执行脚本测试

[root@daxia ~]# sh case1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:1
==backup==
[root@daxia ~]# sh case1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:2
==copy==
[root@daxia ~]# sh case1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:3    
==quit==
[root@daxia ~]# sh case1.sh 
=========+
1.backup |
2.copy   |
3.quit   |
=========+
请输入你的选项[1|2|3]:4
!!!!大虾警告!!!!
执行case1.sh后,请输入 {1|2|3}

案例二:rsync服务脚本

        案例思路: rsync的启动命令: rsync --daemon rsync的停止命令: pkill rsync

if语句执行

[root@daxia ~]# vim if2.sh
#!/bin/bash
source /etc/init.d/functions
​
if [ $1 == "start" ];then
    rsync --daemon
    action "rsync starting..." /bin/true
elif [ $1 == "stop" ];then
    pkill rsync
    action "rsync stoping..." /bin/true
else
    echo "USAGE: $0 {start|stop}"
    exit 
fi 

执行脚本测试

[root@daxia ~]# sh if2.sh start
rsync starting...                                          [  确定  ]
[root@daxia ~]# sh if2.sh stop
rsync stoping...                                           [  确定  ]

case语句执行

[root@daxia ~]# vim case2.sh
#!/bin/bash
source /etc/init.d/functions
​
case $1 in
    start)
     if [ ! -f /var/run/rsync.pid ];then
      touch /var/run/rsync.pid
      rsync --daemon
      action "rsync starting.." /bin/true
     else
      action "rsync service running..." /bin/false
     fi
    ;;
    stop)
     rm -f /var/run/rsync.pid
     pkill rsync
     action "rsync stopping..."/bin/true
    ;;
    status)
     if [ ! -f /var/run/rsync.pid ];then
      echo "rsync service status InActive.."
     else
      rsync_status=$(ps aux |grep -v grep | awk '{print $2}')
      echo "rsync service status Active("$rsync_status")"
     fi
    ;;
    *)
     echo "USAGE:$0{start|stop|status}"
     exit
esac

执行脚本测试

[root@daxia ~]# sh case2.sh start
rsync starting..                                           [  确定  ]
[root@daxia ~]# sh case2.sh status
rsync service status Active(PID 1 2 4 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 30 31 32 33 41 43 44 45 47 60 97 274 275 276 277 283 284 288 289 291 292 297 298 328 370 371 380 381 394 395 396 397 398 399 400 401 402 403 404 483 568 572 574 578 580 582 583 584 656 692 701 715 730 785 1211 1216 1315 1738 1742 1785 1789 2351 2608 20877 21461 21462 21498 21531 21571 21622 21673 21702 35033 49365 49824 49828 49895 50046 50050 50051 50057 50353 50354 50358 50449 50453 78262 78273 78357 78380 78393 78395 78400 78401 78403)
[root@daxia ~]# sh case2.sh stop
rsync stopping.../bin/true                                 [  确定  ]

案例三:nginx服务脚本

案例思路: 如何启动 /usr/sbin/nginx 如何停止 /usr/sbin/nginx -s stop 如何重载

[root@daxia ~]# vim case3.sh
#!/bin/bash
source /etc/init.d/functions
case $1 in
	start)
		if [ -f /var/run/nginx.pid ];then
			action "nginx服务已启动..." /bin/false
			exit
		else
			/usr/sbin/nginx
			action "nginx服务启动成功..." /bin/true
		fi
		;;
	stop)
		if [ -f /var/run/nginx.pid ];then
			/usr/sbin/nginx -s stop 
			if [ $? -eq 0 ];then
				action "nginx服务关闭成功..." /bin/true
			else
				action "nginx服务关闭失败..." /bin/false
			fi
		else
			action "nginx服务已经关闭..." /bin/false	
		fi
		;;
	reload)
		if [ -f /var/run/nginx.pid ];then
			/usr/sbin/nginx -s reload
			if [ $? -eq 0 ];then 
				action "nginx重载成功..." /bin/true
			else
				action "nginx重载失败..." /bin/false
			fi
		else
			action "nginx没有启动,无法完成重载" /bin/false
		fi
		;;
	status)
		if [ -f /var/run/nginx.pid ];then
			nginx_pid=$(cat /var/run/nginx.pid)
			echo "nginx ( $nginx_pid ) is running..."
		else
			echo "nginx is not running..."
		fi
		;;
	*)
		echo "USAGE: $0 {start|stop|status}"
esac

执行脚本测试

[root@daxia ~]# sh case3.sh start
nginx服务启动成功...                                       [  确定  ]
[root@daxia ~]# sh case3.sh reload
nginx重载成功...                                           [  确定  ]
[root@daxia ~]# sh case3.sh status
nginx ( 98699 ) is running...
[root@daxia ~]# sh case3.sh stop
nginx服务关闭成功...                                       [  确定  ]

案例四:实现系统工具箱

[root@daxia ~]# vim case4.sh
#!/bin/bash
cat <<EOF
+++++++++++++++
h 显示命令帮助+
f 显示分区使用+
d 显示磁盘挂载+
m 查看内存使用+
u 查看cpu负载 +
q 退出	      +
+++++++++++++++
EOF

read -p "请输入你的选项:" SZ

case $SZ in 
	f)
		df -hT
		;;
	d)
		mount | more
		;;
	m)
		free -h
		;;
	u)
		uptime
		;;
	q)
		exit
		;;
	*)
		echo "USAGE: $0 【h|f|d|m|u|q】"
esac

案例五:实现简单的jumpserver跳板机

        案例思路: 需要看到所有能管理的主机 选择菜单,提示输入某个主机IP地址分为公有和私有地址 私有地址: A 10.0.0.0 -10.255.255.255 B 172.16.0.0 - 172.31.255.255 C 192.168.0.0 - 192.168.255.255

        配置前先配置互信和本地解析 通过秘钥访问(无密码)最安全。 在跳板机产生一对秘钥(公钥、私钥)采用方式:公钥加密,私钥解密,将公钥放到对端服务器上。

打开四台虚拟机ip分别是10、11、12、13,下面配置每台都配置互信,本地解析。

(1)生成公钥id_rsa.pub和私钥id_rsa(保存在宿主目录下.ssh)

[root@node1 ~]# ssh-keygen -t rsa

(2)将公钥传给对端服务器

[root@node1 ~]# for i in 10 11 12 13;do ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.8.$i;done

(3)可以将对方ip和主机名进行本地解析

[root@node1 ~]# vim /etc/hosts
192.168.8.10 node1
192.168.8.11 node2
192.168.8.12 node3
192.168.8.13 node4

(4)将/etc/hosts 文件拷贝给所有服务器

[root@node1 ~]# for i in 10 11 12 13;do scp /etc/hosts root@192.168.8.$i:/etc/; done

最后使用case来制作一个脚本吧,注意这里是node1主机,四台都做了互信,都可以执行脚本操作。(里面的function后面再讲)

[root@node1 ~]# vim case5.sh
#!/bin/bash
​
Menu(){
cat <<EOF
1.node1-192.168.8.10
2.node2-192.168.8.11
3.node3-192.168.8.12
4.node4-192.168.8.13
h.help
EOF
}
​
Menu
​
read -p "请输入你要连接的主机序号:" CONN
case $CONN in
    1)
    ssh root@192.168.8.10
    ;;
    2)
    ssh root@192.168.8.11
    ;;
    3)
    ssh root@192.168.8.12
    ;;
    4)  
    ssh root@192.168.8.13
    ;;
    h)
    clear
    Menu
    ;;
    *)
    echo "USAGE: $0 输入要连接的主机序号 【1|2|3|4】"
esac    

【linux 脚本篇】流程控制语句-case

 文章来源地址https://www.toymoban.com/news/detail-471030.html

到了这里,关于【linux 脚本篇】流程控制语句-case的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Shell中的流程控制(if/case/for/while)

    1)第一种写法: if [ 条件判断式 ];then ​ 程序 fi 2)第二种写法: if [ 条件判断式 ] then ​ 程序 fi if后要有空格 [ 条件判断式 ],中括号和条件判断式之间必须有空格 条件判断-a, -o -a 相当于and -o 相当于or 单分支脚本 if_demo1.sh 执行脚本: if [ 条件判断式 ] then ​ 程序 elif [ 条

    2024年02月11日
    浏览(45)
  • Linux shell编程学习笔记20:case ... esac、continue 和break语句

    在实际编程中,我们有时会请到多条件多分支选择的情况,用if…else语句来嵌套处理不烦琐,于是JavaScript等语言提供了多选择语句switch ... case。与此类似,Linux Shell脚本编程中提供了case...in...esac 语句,来实现多条件多分支选择结构:其语法结构为:   case 变量名 in 值1[|值

    2024年02月05日
    浏览(50)
  • 【Dart】=> [04] Dart初体验-基础语法(流程控制-if-switch-case-for循环

    学习内容: if 语句 switch – case 语句 for 循环语句 if 语句让代码有选择的执行,可以指定满足条件时才能执行的代码。 语句形式: if … else if … else if … else 案例: 根据学生分数,判断学生成绩是否及格 根据学生分数,划分学生成绩所在等级 优秀:分数大于等于90分 良好

    2024年01月19日
    浏览(43)
  • c#笔记-流程控制语句

    为了展示流程控制的作用,需要每次执行程序时都使用不一样的值。 无论是每次都修改源码,还是从控制台读取输入都太麻烦了。 所以使用随机数进行测试。 随机数的使用方式如下,使用随机数类,获取一个默认的随机数工具,然后用这个工具生成随机数。 1 变量储存值而

    2024年02月05日
    浏览(44)
  • [MySQL]流程控制语句

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/17991087 出自【进步*于辰的博客】 参考笔记三,P32.5。 目录 1、选择语句 1.1 if 1.2 case 1.2.1 形式一 1.2.2 形式二 2、循环语句 2.1 while 2.2 repeat 2.3 loop 最后 用于测试的数据表:

    2024年02月19日
    浏览(33)
  • MySQL-流程控制语句

    Ⅰ、分支结构-If ​ ①不同的表达式对应不同的操作 ​ ② 使用在begin end中 ​ ③语法定义: Ⅱ、分支结构-case ​ ①类似与 Java 中 if···esle if···else·· ​ ②类似于 Java 中 switch 语句 ​ ③语法: Ⅰ、循环结构-loop ​ ①用来重复执行某些语句,直到循环退出(使用 leave 子句

    2024年04月14日
    浏览(38)
  • 三、流程控制语句

    流程控制对于任何一门编程语言来说都是至关重要的,它提供了控制程序步骤的基本手段。如果没有流程控制语句,整个程序将按照线性的顺序来执行,不能根据用户的输入决定执行的序列。 Java程序是从上到下逐行执行语句,中间没有任何判断和跳转。 根据条件,选择性地

    2024年02月04日
    浏览(72)
  • Java 流程控制 Switch 语句

    一、什么是Switch语句? Switch语句是Java中的一种流程控制语句,用于根据表达式的值选择不同的执行路径。Switch语句通常用于多个条件的判断,比如根据用户输入的不同选项执行不同的操作。 二、语法说明 Switch语句的基本语法如下: Switch语句包含一个表达式和多个case语句块

    2024年02月09日
    浏览(49)
  • 【JAVA-模块四 流程控制语句】

    流程控制语句: 控制程序执行的顺序的语句 分类:顺序结构(按照代码的先后顺序依次执行), ​ 分支结构:if,switch ​ 循环结构:for,while,do while if第一种格式: 成立就执行,不成立就不执行 if第二种格式 双分支: if的第三种格式:多条件分支 最后一个else算是配体条件(

    2023年04月16日
    浏览(30)
  • Python流程控制语句-条件判断语句练习及应用详解

    Python代码在执行时是按照自上向下顺序执行的。通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次。流程控制语句分成两大类:条件判断语句,循环语句。本节我们先来将条件判断语句。 if语句是Python中非常重要的流程控制语句之一,其基本语

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包