本篇文章继续给大家介绍Shell编程,带大家领略Shell的魅力,由if判断引入,以此扩展Shell菜单,case流程判断。还准备了很多案例,包括猜数小游戏,批量创建用户等等,在案例中学习会事半功倍!
if判断
1. 第一种写法,then在表达式的后面,需要在表达式后面加分号 2. if [表达式成立];then 3. 执行的具体命令集合 4. fi 5. 6. 第二种写法,then在if下面,表达式后面不需要加分号 7. if [表达式成立] 8. then 9. 执行的具体命令集合 10. fi 11. 12. 语句1: 13. 14. if [ 你有钱 ] 15. then 16. 我就嫁给你 17. fi 18. 19. 一个条件一个结果,成立则执行then后面的动作,不成立则无视 20. 类似 [ 表达式成立 ] && echo 成立 21. 22. 语句2: 23. 24. if [ 你有钱 ] 25. then 26. 我就嫁给你 27. else 28. 拜拜 29. fi 30. 31. 一个条件两个结果,成立则执行then后面的动作,不成立则执行else后面内容 32. 类似 [ 表达式成立 ] && echo 成立 || echo 不成立 33. 34. 语句3: 35. 36. if [ 你有钱 ] 37. then 38. 我就嫁给你 39. elif [ 你有房 ] 40. then 41. 我委屈点嫁给你 42. elif [ 你长得帅 ] 43. then 44. 我们先做朋友 45. else 46. 啥也不是 47. fi 48. 49. 多个条件多个结果,成立则执行then后面的动作,不成立则执行else后面内容
一、根据判断的操作系统的版本安装不同的yum仓库
1. [root@LB00 Day03]# cat os_install.sh 2. #!/bin/bash 3. #1、取系统版本号 4. os_ve=`hostnamectl|grep System|awk '{print $5}'` 5. mv_yum='mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup' 6. #2、判断网络是否正常 7. ping -c1 -W1 www.baidu.com &> /dev/null 8. if [ $? -ne 0 ];then 9. echo "网络检查失败,正在重启网络..." 10. systemctl restart network 11. ping -c1 -W1 www.baidu.com &> /dev/null 12. if [ $? -ne 0 ];then 13. echo "网络重启完成,无法联网,请运维检查网络..." 14. echo "网络重启完成,无法联网,请运维检查网络..." > /tmp/os_install.log 15. mail -s '检查网络' xxxxx@qq.com < /tmp/os_install.log 16. exit 17. fi 18. fi 19. #3、判断系统是否有安装wget命令 20. rpm -qa wget &> /dev/null 21. if [ $? -ne 0 ] 22. then 23. echo "wget命令未安装,正在安装中请稍后......" 24. yum -y install wget &> /dev/null 25. if [ $? -eq 0 ];then 26. echo "wget安装成功..." 27. else 28. echo "wget安装失败,请手动测试..." 29. fi 30. fi 31. #4、对比版本执行安装yum仓库 32. $mv_yum 33. if [ $os_ve -eq 7 ];then 34. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null 35. if [ $? -eq 0 ];then 36. echo "yum仓库配置完成" 37. fi 38. elif [ $os_ve -eq 6 ];then 39. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo &> /dev/null 40. if [ $? -eq 0 ];then 41. echo "yum仓库配置完成" 42. fi 43. elif [ $os_ve -eq 8 ];then 44. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo &> /dev/null 45. if [ $? -eq 0 ];then 46. echo "yum仓库配置完成" 47. fi 48. else 49. echo 这个版本的系统没有准备yum仓库的安装。 50. fi 51. [root@LB00 Day03]# sh os_install.sh 52. yum仓库配置完成 53. [root@LB00 Day03]# ip route del default 54. [root@LB00 Day03]# ip route add default via 10.0.0.3 dev eth0 55. [root@LB00 Day03]# sh os_install.sh 56. 网络检查失败,正在重启网络... 57. yum仓库配置完成
Shell菜单
两种创建菜单方式,给菜单加颜色
1. [root@LB00 Day03]# cat menu.sh 2. #!/bin/bash 3. cat<<EOF 4. 1.PHP5.4 5. 2.PHP5.5 6. 3.PHP7.1 7. EOF 8. echo -e "\t\t\t\033[31m 1.PHP5.4 \033[0m" 9. echo -e "\t\t\t\033[32m 2.PHP5.5 \033[0m" 10. echo -e "\t\t\t\033[33m 3.PHP7.1 \033[0m" 11. [root@LB00 Day03]# sh menu.sh 12. 1.PHP5.4 13. 2.PHP5.5 14. 3.PHP7.1 15. 1.PHP5.4 16. 2.PHP5.5 17. 3.PHP7.1
利用read与菜单交互
1. [root@LB00 Day03]# cat menu.sh 2. #!/bin/bash1 3. while true #死循环 4. do 5. 6. echo -e "\t\t\t\033[31m 1.PHP5.4 \033[0m" 7. echo -e "\t\t\t\033[32m 2.PHP5.5 \033[0m" 8. echo -e "\t\t\t\033[33m 3.PHP7.1 \033[0m" 9. echo -e "\t\t\t\033[33m 4.exit \033[0m" 10. read -p "请输入你要安装的版本的编号: " num 11. if [ $num == 1 -o $num == "PHP5.4" ] 12. then 13. echo "配置PHP5.4yum仓库..." 14. echo "安装PHP5.4..." 15. elif [ $num == 2 -o $num == "PHP5.5" ] 16. then 17. echo "配置PHP5.5yum仓库..." 18. echo "安装PHP5.5..." 19. elif [ $num == 3 -o $num == "PHP7.1" ] 20. then 21. echo "配置PHP7.1yum仓库..." 22. echo "安装PHP7.1..." 23. elif [ $num == 4 -o $num == "exit" ] 24. then 25. exit 26. else 27. echo "输入信息有误" 28. fi 29. 30. done 31. [root@LB00 Day03]# sh menu.sh 32. 1.PHP5.4 33. 2.PHP5.5 34. 3.PHP7.1 35. 4.exit 36. 请输入你要安装的版本的编号: 1 37. 配置PHP5.4yum仓库... 38. 安装PHP5.4... 39. 1.PHP5.4 40. 2.PHP5.5 41. 3.PHP7.1 42. 4.exit 43. 请输入你要安装的版本的编号: 2 44. 配置PHP5.5yum仓库... 45. 安装PHP5.5... 46. 1.PHP5.4 47. 2.PHP5.5 48. 3.PHP7.1 49. 4.exit 50. 请输入你要安装的版本的编号: 4 51. [root@LB00 Day03]#
一、安装不同的软件服务版本
Tomcat Apache PHP Nginx
二级菜单,循环套循环,函数调用
1. [root@LB00 Day03]# cat menu2.sh 2. #!/bin/bash1 3. while true 4. do 5. 6. menu1(){ 7. echo -e "\t\t\t\033[31m 1.PHP \033[0m" 8. echo -e "\t\t\t\033[32m 2.Tomcat \033[0m" 9. echo -e "\t\t\t\033[33m 3.Redis \033[0m" 10. echo -e "\t\t\t\033[34m 4.Mysql \033[0m" 11. echo -e "\t\t\t\033[35m 5.exit \033[0m" 12. echo -e "\t\t\t\033[36m h.显示菜单 \033[0m" 13. } 14. menu2(){ 15. echo -e "\t\t\t\033[31m 1.PHP5.4 \033[0m" 16. echo -e "\t\t\t\033[31m 2.PHP5.5 \033[0m" 17. echo -e "\t\t\t\033[31m 3.PHP7.1 \033[0m" 18. echo -e "\t\t\t\033[31m 4.返回主菜单 \033[0m" 19. echo -e "\t\t\t\033[31m 5.显示PHP菜单 \033[0m" 20. } 21. menu3(){ 22. echo -e "\t\t\t\033[32m 1.Tomcat7 \033[0m" 23. echo -e "\t\t\t\033[32m 2.Tomcat8 \033[0m" 24. echo -e "\t\t\t\033[32m 3.Tomcat9 \033[0m" 25. echo -e "\t\t\t\033[32m 4.返回主菜单 \033[0m" 26. echo -e "\t\t\t\033[32m 5.显示Tomcat菜单 \033[0m" 27. } 28. menu1 29. while true 30. do 31. read -p "请输入要安装的服务编号: " num1 32. if [ $num1 == 1 ] 33. then 34. menu2 35. while true 36. do 37. read -p "请输入要安装的服务编号: " num_PHP 38. if [ $num_PHP -eq 1 ] 39. then 40. echo "正在安装PHP5.4..." 41. elif [ $num_PHP -eq 2 ] 42. then 43. echo "正在安装PHP5.5..." 44. elif [ $num_PHP -eq 3 ] 45. then 46. echo "正在安装PHP7.1..." 47. elif [ $num_PHP -eq 4 ] 48. then 49. break 2 #跳出2次循环 50. elif [ $num_PHP -eq 5 ] 51. then 52. menu2 53. fi 54. done 55. elif [ $num1 == 2 ] 56. then 57. menu3 58. while true 59. do 60. read -p "请输入要安装的具体版本号: " num2 61. if [ $num2 -eq 1 ] 62. then 63. echo "正在安装Tomcat7..." 64. elif [ $num2 -eq 2 ] 65. then 66. echo "正在安装Tomcat8..." 67. elif [ $num2 -eq 3 ] 68. then 69. echo "正在安装Tomcat9..." 70. elif [ $num2 -eq 4 ] 71. then 72. break 2 #跳出两次循环 73. elif [ $num2 -eq 5 ] 74. then 75. menu3 76. fi 77. done 78. elif [ $num1 == 3 ] 79. then 80. echo 3 81. elif [ $num1 == 4 ] 82. then 83. echo 4 84. elif [ $num1 == 5 ] 85. then 86. exit 87. elif [ $num1 == h ] 88. then 89. menu1 90. fi 91. done 92. 93. done 94. [root@LB00 Day03]# sh menu2.sh 95. 1.PHP 96. 2.Tomcat 97. 3.Redis 98. 4.Mysql 99. 5.exit 100. h.显示菜单 101. 请输入要安装的服务编号: 1 102. 1.PHP5.4 103. 2.PHP5.5 104. 3.PHP7.1 105. 4.返回主菜单 106. 5.显示PHP菜单 107. 请输入要安装的服务编号: 1 108. 正在安装PHP5.4... 109. 请输入要安装的服务编号: 1 110. 正在安装PHP5.4... 111. 请输入要安装的服务编号: 1 112. 正在安装PHP5.4... 113. 请输入要安装的服务编号: 1 114. 正在安装PHP5.4... 115. 请输入要安装的服务编号: 1 116. 正在安装PHP5.4... 117. 请输入要安装的服务编号: 5 118. 1.PHP5.4 119. 2.PHP5.5 120. 3.PHP7.1 121. 4.返回主菜单 122. 5.显示PHP菜单 123. 请输入要安装的服务编号: 4 124. 1.PHP 125. 2.Tomcat 126. 3.Redis 127. 4.Mysql 128. 5.exit 129. h.显示菜单 130. 请输入要安装的服务编号: 2 131. 1.Tomcat7 132. 2.Tomcat8 133. 3.Tomcat9 134. 4.返回主菜单 135. 5.显示Tomcat菜单 136. 请输入要安装的具体版本号: 2 137. 正在安装Tomcat8... 138. 请输入要安装的具体版本号: 2 139. 正在安装Tomcat8... 140. 请输入要安装的具体版本号: 2 141. 正在安装Tomcat8... 142. 请输入要安装的具体版本号: 5 143. 1.Tomcat7 144. 2.Tomcat8 145. 3.Tomcat9 146. 4.返回主菜单 147. 5.显示Tomcat菜单 148. 请输入要安装的具体版本号: 4 149. 1.PHP 150. 2.Tomcat 151. 3.Redis 152. 4.Mysql 153. 5.exit 154. h.显示菜单 155. 请输入要安装的服务编号: 5
注意:if做匹配最好用==,这样字符串和整数都能匹配;break跳出循环注意需要跳几次,跳几次就在后面写几
case流程判断
1. case 变量 in 2. 匹配序列1) 3. 执行命令 4. ;; 5. 匹配序列2) 6. 执行命令 7. ;; 8. 匹配序列3) 9. 执行命令 10. ;; 11. *) 12. 无匹配后续命令 13. esac 14. 15. [root@LB00 Day03]# cat case.sh 16. #!/bin/bash 17. case $1 in 18. mysql) 19. echo mysql...... 20. ;; 21. shell) 22. echo shell...... 23. ;; 24. docker) 25. echo docker...... 26. ;; 27. *) 28. echo "Usage: $0[mysql|shell|docker]" 29. esac 30. [root@LB00 Day03]# sh case.sh 31. Usage: case.sh[mysql|shell|docker] 32. [root@LB00 Day03]# sh case.sh mysql 33. mysql...... 34. [root@LB00 Day03]# sh case.sh shell 35. shell...... 36. [root@LB00 Day03]# sh case.sh docker 37. docker......
一、使用菜单查看内存、磁盘、负载、公网IP
1. [root@LB00 Day03]# cat xitong.sh 2. #!/bin/bash 3. menu1(){ 4. echo -e "\t\t\t\033[31m 1|f.显示内存 \033[0m" 5. echo -e "\t\t\t\033[32m 2|d.显示磁盘 \033[0m" 6. echo -e "\t\t\t\033[33m 3|u.显示负载 \033[0m" 7. echo -e "\t\t\t\033[34m 4|c.显示公网IP \033[0m" 8. echo -e "\t\t\t\033[35m 5|h.显示帮助 \033[0m" 9. echo -e "\t\t\t\033[36m 6|e.exit \033[0m" 10. } 11. menu1 12. while true 13. do 14. read -p "请输入你要查看系统信息的编号" num 15. case $num in 16. 1|f) 17. free -h 18. ;; 19. 2|d) 20. df -h 21. ;; 22. 3|u) 23. uptime 24. ;; 25. 4|c) 26. curl -s cip.cc |awk 'NR==1{print $3}' 27. ;; 28. 5|h) 29. clear 30. menu1 31. ;; 32. 6|e) 33. exit 34. ;; 35. *) 36. echo "Usage: $0 [1|2|3|4|5|6] [f|d|u|c|h|e]" 37. esac 38. done 39. [root@LB00 Day03]# sh xitong.sh 40. 1|f.显示内存 41. 2|d.显示磁盘 42. 3|u.显示负载 43. 4|c.显示公网IP 44. 5|h.显示帮助 45. 6|e.exit 46. 请输入你要查看系统信息的编号1 47. total used free shared buff/cache available 48. Mem: 972M 148M 392M 13M 431M 670M 49. Swap: 1.0G 0B 1.0G 50. 请输入你要查看系统信息的编号2 51. Filesystem Size Used Avail Use% Mounted on 52. devtmpfs 476M 0 476M 0% /dev 53. tmpfs 487M 0 487M 0% /dev/shm 54. tmpfs 487M 14M 473M 3% /run 55. tmpfs 487M 0 487M 0% /sys/fs/cgroup 56. /dev/sda3 19G 2.0G 17G 11% / 57. /dev/sda1 197M 110M 88M 56% /boot 58. tmpfs 98M 0 98M 0% /run/user/0 59. 请输入你要查看系统信息的编号3 60. 15:22:53 up 1 day, 15:59, 3 users, load average: 0.00, 0.01, 0.05 61. 请输入你要查看系统信息的编号4 62. 123.112.17.24 63. 请输入你要查看系统信息的编号5 64. 1|f.显示内存 65. 2|d.显示磁盘 66. 3|u.显示负载 67. 4|c.显示公网IP 68. 5|h.显示帮助 69. 6|e.exit 70. 请输入你要查看系统信息的编号h 71. 1|f.显示内存 72. 2|d.显示磁盘 73. 3|u.显示负载 74. 4|c.显示公网IP 75. 5|h.显示帮助 76. 6|e.exit 77. 请输入你要查看系统信息的编号e
二、jumperserver跳板机
先做免密钥
1. [root@LB00 Day03]# ssh-keygen 2. Generating public/private rsa key pair. 3. Enter file in which to save the key (/root/.ssh/id_rsa): 4. Enter passphrase (empty for no passphrase): 5. Enter same passphrase again: 6. Your identification has been saved in /root/.ssh/id_rsa. 7. Your public key has been saved in /root/.ssh/id_rsa.pub. 8. The key fingerprint is: 9. SHA256:8oyhGevLUlZPstUAA43+bI1C/xvCEsbLEQEt2RdRheY root@LB00 10. The key's randomart image is: 11. +---[RSA 2048]----+ 12. | .=o+==.o. | 13. | o +.o.+ | 14. | o.. o o | 15. | .o.o E . | 16. | .*=oOS | 17. | o+XB*o | 18. | oBo+.+ | 19. | .o . ... | 20. | .+. .. | 21. +----[SHA256]-----+ 22. [root@LB00 Day03]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.7 23. [root@LB00 Day03]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.8 24. [root@LB00 Day03]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.31 25. [root@LB00 Day03]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.41 26. [root@LB00 Day03]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.51
基础功能
1. [root@LB00 Day03]# cat jumperserver.sh 2. #!/bin/bash 3. Web01=10.0.0.7 4. Web02=10.0.0.8 5. NFS=10.0.0.31 6. MySQL=10.0.0.51 7. Backup=10.0.0.41 8. menu(){ 9. echo -e "\t\t\t\033[31m 1.Web01|$Web01 \033[0m" 10. echo -e "\t\t\t\033[32m 2.Web02|$Web02 \033[0m" 11. echo -e "\t\t\t\033[33m 3.NFS|$NFS \033[0m" 12. echo -e "\t\t\t\033[34m 4.MySQL|$MySQL \033[0m" 13. echo -e "\t\t\t\033[35m 5.Backup|$Backup \033[0m" 14. } 15. while true 16. do 17. menu 18. read -p "请输入要跳转的服务器编号: " num1 19. case $num1 in 20. 1) 21. ssh $Web01 22. ;; 23. 2) 24. ssh $Web02 25. ;; 26. 3) 27. ssh $NFS 28. ;; 29. 4) 30. ssh $MySQL 31. ;; 32. 5) 33. ssh $Backup 34. ;; 35. *) 36. echo "Usage: [1|2|3|4|5]" 37. ;; 38. esac 39. done 40. 41. #加入环境变量实现连接Xshell自动执行脚本,不允许进入命令行 42. [root@LB00 Day03]# tail -1 /etc/profile 43. sh /server/scripts/Day03/jumperserver.sh 44. 45. 1.Web01|10.0.0.7 46. 2.Web02|10.0.0.8 47. 3.NFS|10.0.0.31 48. 4.MySQL|10.0.0.51 49. 5.Backup|10.0.0.41 50. 请输入要跳转的服务器编号: 1 51. Last login: Tue May 16 15:41:54 2023 from 10.0.0.4 52. [root@Web01 ~]# exit 53. logout 54. Connection to 10.0.0.7 closed. 55. 1.Web01|10.0.0.7 56. 2.Web02|10.0.0.8 57. 3.NFS|10.0.0.31 58. 4.MySQL|10.0.0.51 59. 5.Backup|10.0.0.41 60. 请输入要跳转的服务器编号:
jumperserver脚本简单完善
1、权限控制,区分运维和开发的菜单,主菜单:1、运维;2、开发
2、添加密码,增加5次输错修改密码功能
3、只有运维能退出(留后门,其他角色都不能ctrl+c)
1. [root@LB00 Day03]# cat jumperserver.sh 2. #!/bin/bash 3. trap "别乱按小心爆炸" INT #禁用ctrl+c 4. trap "别乱按小心爆炸" HUP #禁用停止进程,进程结束和初始化进程 5. trap "别乱按小心爆炸" TSTP #禁用ctrl+z 6. disable_ctrl_z () { 7. echo "The Control-Z interrupt is disabled." 8. read -p '是你吗' snm 9. if [ "$snm" == yes ];then 10. trap - INT 11. trap - TSTP 12. exit 13. fi 14. } 15. trap disable_ctrl_z SIGTSTP 16. disable_ctrl_c () { 17. echo "The Control-C interrupt is disabled." 18. } 19. trap disable_ctrl_c SIGINT 20. 21. Web01=10.0.0.7 22. Web02=10.0.0.8 23. NFS=10.0.0.31 24. MySQL=10.0.0.51 25. Backup=10.0.0.41 26. password_neizhi_kaifa=666 27. mimashuru=false 28. 29. menu1(){ 30. echo -e "\t\t\t\033[31m 1.Web01|$Web01 \033[0m" 31. echo -e "\t\t\t\033[32m 2.Web02|$Web02 \033[0m" 32. echo -e "\t\t\t\033[33m 3.NFS|$NFS \033[0m" 33. echo -e "\t\t\t\033[34m 4.MySQL|$MySQL \033[0m" 34. echo -e "\t\t\t\033[35m 5.Backup|$Backup \033[0m" 35. } 36. menu2(){ 37. echo -e "\t\t\t\033[31m 1.运维 \033[0m" 38. echo -e "\t\t\t\033[32m 2.开发 \033[0m" 39. echo -e "\t\t\t\033[33m 3.新员工注册身份 \033[0m" 40. } 41. while true 42. do 43. menu2 44. read -p "请输入您角色编号: " num2 45. if [ "$num2" == 1 ];then 46. while true 47. do 48. read -p "欢迎尊敬的运维工程师,请输入您的密码" password_yunwei #-s隐藏输入内容 49. echo '' #-s会导致下一行格式出问题,所以在read使用-s后,下面紧跟空行解决 50. if [ "$password_yunwei" != 123 ];then 51. echo "密码输入错误,请重新输入" 52. else 53. mimashuru=true 54. menu1 55. break; 56. fi 57. done 58. elif [ "$num2" == 2 ];then 59. while true 60. do 61. let i++ 62. read -s -p "欢迎尊敬的开发人员,请输入您的密码" password_kaifa #-s隐藏输入内容 63. echo '' #-s会导致下一行格式出问题,所以在read使用-s后,下面紧跟空行解决 64. if [ "$password_kaifa" != "$password_neizhi_kaifa" ];then 65. echo "密码输入错误,请重新输入" 66. else 67. mimashuru=true 68. menu1 69. break; 70. fi 71. if [ "$i" -gt 4 ];then 72. echo "输入密码错误次数过多,系统默认为您找回密码" 73. read -p "请输入您注册时候的预留邮箱" youxiang 74. case $youxiang in 75. apple@qq.com) 76. echo 邮箱为:apple@qq.com 77. ;; 78. banana@qq.com) 79. echo 邮箱为:banana@qq.com 80. ;; 81. orange@qq.com) 82. echo 邮箱为:orange@qq.com 83. ;; 84. 666@qq.com) 85. echo 邮箱为:666@qq.com 86. ;; 87. *) 88. echo 这个邮箱里系统没有,你到底是不是我们公司的! 89. break 90. ;; 91. esac 92. yzm="$((RANDOM%999999))" 93. printf -v yzm "%06d" "$yzm" #不足6位数字,用6为填充 94. echo 您正在进行xx公司跳板机密码找回业务,验证码为$yzm,如非本人操作请无视此邮箱,请不要把验证码告诉别人! > /tmp/yzm.log 95. mail -s '找回密码' $youxiang < /tmp/yzm.log &> /dev/null 96. echo "已将6位随机验证码发送至您注册时的预留邮箱" 97. sleep 2 98. read -p "请输入6位随机验证码" syzm 99. if [ "$syzm" == $yzm ];then 100. echo "密码输入正确,你密码给你重置成888了" 101. password_neizhi_kaifa=888 102. menu2 103. else 104. echo "这你都能输入错啊?" 105. break 106. fi 107. fi 108. done 109. elif [ "$num2" == 3 ];then 110. echo '功能待开发' 111. else 112. echo 'Usage: [1|2|3]' 113. fi 114. 115. if [ $mimashuru == true ];then 116. read -p "请输入要跳转的服务器编号: " num1 117. case $num1 in 118. 1) 119. ssh $Web01 120. ;; 121. 2) 122. ssh $Web02 123. ;; 124. 3) 125. ssh $NFS 126. ;; 127. 4) 128. ssh $MySQL 129. ;; 130. 5) 131. ssh $Backup 132. ;; 133. *) 134. echo "Usage: [1|2|3|4|5]" 135. ;; 136. esac 137. fi 138. done 139. 140. [root@LB00 Day03]# sh jumperserver.sh #测试密码功能,验证码发送邮箱功能 141. 1.运维 142. 2.开发 143. 3.新员工注册身份 144. 请输入您角色编号: 2 145. 欢迎尊敬的开发人员,请输入您的密码1 146. 密码输入错误,请重新输入 147. 欢迎尊敬的开发人员,请输入您的密码1 148. 密码输入错误,请重新输入 149. 欢迎尊敬的开发人员,请输入您的密码1 150. 密码输入错误,请重新输入 151. 欢迎尊敬的开发人员,请输入您的密码1 152. 密码输入错误,请重新输入 153. 欢迎尊敬的开发人员,请输入您的密码1 154. 密码输入错误,请重新输入 155. 输入密码错误次数过多,系统默认为您找回密码 156. 输入您注册时候的预留邮箱666@qq.com 157. 邮箱为:666@qq.com 158. 已将6位随机验证码发送至您注册时的预留邮箱 159. 请输入6位随机验证码014565 160. 密码输入正确,你密码给你重置成888了 161. 1.运维 162. 2.开发 163. 3.新员工注册身份 164. 欢迎尊敬的开发人员,请输入您的密码 #隐藏 165. 1.Web01|10.0.0.7 166. 2.Web02|10.0.0.8 167. 3.NFS|10.0.0.31 168. 4.MySQL|10.0.0.51 169. 5.Backup|10.0.0.41 170. 请输入要跳转的服务器编号: ^CThe Control-C interrupt is disabled. #测试禁用ctrl+c,ctrl+z ,ctrl+z留了后门 171. ^ZThe Control-Z interrupt is disabled. 172. 是你吗yes
三、用case实现Nginx启动脚本
基础功能
1. /usr/sbin/nginx 启动 2. /usr/sbin/nginx -s stop 停止 3. /usr/sbin/nginx -s reload 重新加载 4. /usr/sbin/nginx -s restart 不支持 5. /usr/sbin/nginx -s stop && sleep 1 && /usr/sbin/nginx 重启 6. /usr/sbin/nginx -s status 不支持 7. Nginx_port=`netstat -tnulp|grep nginx |awk '{print $4}'` 8. echo "Nginx_port=$Nginx_port" 查看状态 9. 10. [root@LB00 Day03]# cat nginx.sh 11. #!/bin/bash 12. case $1 in 13. start) 14. /usr/sbin/nginx 15. ;; 16. stop) 17. /usr/sbin/nginx -s stop 18. ;; 19. reload) 20. /usr/sbin/nginx -s reload 21. ;; 22. restart) 23. /usr/sbin/nginx -s stop && sleep 1 && /usr/sbin/nginx 24. ;; 25. status) 26. Nginx_port=`netstat -tnulp|grep nginx |awk '{print $4}'` 27. echo "Nginx_port=$Nginx_port" 28. ;; 29. *) 30. echo "Usage: [start|stop|reload|restart|status]" 31. esac
完善版本
1. [root@LB00 Day03]# cat nginx.sh 2. #!/bin/bash 3. [ -f /etc/init.d/functions ] && . /etc/init.d/functions 4. Nginx='/usr/sbin/nginx' 5. test(){ 6. if [ $? -eq 0 ];then 7. #echo "Nginx启动成功" 8. action "Nginx $1 is " /bin/true 9. else 10. #echo "Nginx停止失败" 11. action "Nginx $1 is " /bin/false 12. fi 13. } 14. case $1 in 15. start) 16. $Nginx 17. test $1 18. ;; 19. stop) 20. $Nginx -s stop 21. test $1 22. ;; 23. reload) 24. $Nginx -s reload 25. test $1 26. ;; 27. restart) 28. $Nginx -s stop && sleep 1 && $Nginx 29. test $1 30. ;; 31. status) 32. Nginx_port=`netstat -tnulp|grep nginx |awk '{print $4}'` 33. echo "Nginx_port=$Nginx_port" 34. ;; 35. *) 36. echo "Usage: [start|stop|reload|restart|status]" 37. esac
实战练习
进行一些实战练习,使学习达到事半功倍的效果。
一、批量创建删除用户
1、批量创建用户
2、批量删除用户
read读入变量用户的前缀和个数,使用for循环,显示出需要创建的用户,提示创建还是删除以上用户,y创建,d删除,i查看用户id,结果需要提示
1. [root@LB00 Day03]# cat yonghu.sh 2. #!/bin/bash 3. read -p "请输入用户的前缀: " qianzhui 4. if ! [[ $qianzhui =~ ^[a-z] ]];then 5. echo 请注意前缀输入格式 6. exit 7. fi 8. read -p "请输入要操作的数量: " num1 9. if ! [[ $num1 =~ ^[0-9]+$ ]];then 10. echo 请注意输入数量的格式 11. exit 12. fi 13. echo 为您生成如下用户 14. for i1 in $(seq 1 $num1) 15. do 16. echo $qianzhui$i1 17. done 18. read -p "您可以选择操作y为创建,d为删除,i为查看用户id[y|d|i]" caozuo 19. if [ $caozuo == y ];then 20. for i2 in $(seq 1 $num1) 21. do 22. useradd $qianzhui$i2 23. done 24. echo "用户创建完毕" 25. elif [ $caozuo == d ];then 26. for i3 in $(seq 1 $num1) 27. do 28. userdel -rf $qianzhui$i3 29. done 30. echo "用户删除完毕" 31. elif [ $caozuo == i ];then 32. for i4 in $(seq 1 $num1) 33. do 34. id $qianzhui$i4 35. done 36. echo "用户查询完毕" 37. else 38. echo 请输入正确的内容[y|d|i] 39. fi 40. [root@LB00 Day03]# sh yonghu.sh 41. 请输入用户的前缀: qwer 42. 请输入要操作的数量: 5 43. 为您生成如下用户 44. qwer1 45. qwer2 46. qwer3 47. qwer4 48. qwer5 49. 您可以选择操作y为创建,d为删除,i为查看用户id[y|d|i]y 50. 用户创建完毕 51. [root@LB00 Day03]# sh yonghu.sh 52. 请输入用户的前缀: qwer 53. 请输入要操作的数量: 5 54. 为您生成如下用户 55. qwer1 56. qwer2 57. qwer3 58. qwer4 59. qwer5 60. 您可以选择操作y为创建,d为删除,i为查看用户id[y|d|i]i 61. uid=1002(qwer1) gid=1002(qwer1) groups=1002(qwer1) 62. uid=1003(qwer2) gid=1003(qwer2) groups=1003(qwer2) 63. uid=1004(qwer3) gid=1004(qwer3) groups=1004(qwer3) 64. uid=1005(qwer4) gid=1005(qwer4) groups=1005(qwer4) 65. uid=1006(qwer5) gid=1006(qwer5) groups=1006(qwer5) 66. 用户查询完毕 67. [root@LB00 Day03]# sh yonghu.sh 68. 请输入用户的前缀: qwer 69. 请输入要操作的数量: 5 70. 为您生成如下用户 71. qwer1 72. qwer2 73. qwer3 74. qwer4 75. qwer5 76. 您可以选择操作y为创建,d为删除,i为查看用户id[y|d|i]d 77. 用户删除完毕 78. [root@LB00 Day03]# sh yonghu.sh 79. 请输入用户的前缀: qwer 80. 请输入要操作的数量: 5 81. 为您生成如下用户 82. qwer1 83. qwer2 84. qwer3 85. qwer4 86. qwer5 87. 您可以选择操作y为创建,d为删除,i为查看用户id[y|d|i]i 88. id: qwer1: no such user 89. id: qwer2: no such user 90. id: qwer3: no such user 91. id: qwer4: no such user 92. id: qwer5: no such user 93. 用户查询完毕
二、猜数字小游戏
1、系统随机生成1-100之间的数字
1. echo $RANDOM 默认1-32767 2. echo $((RANDOM%100)) 0-99 3. echo $((RANDOM%100+1)) 1-100
2、read让用户输入1-100之间的一个数字
如果小于随机的,则提示用户大了
如果小于随机的,则提示用户小了
3、没猜对一直猜,猜对了提示成功,退出脚本
1. [root@LB00 Day03]cat caishu.sh 2. #!/bin/bash 3. sy_ran=`echo $((RANDOM%100+1))` 4. while true 5. do 6. read -p "请输入你要猜的数字[1-100]" num 7. if [ $num -gt $sy_ran ];then 8. echo "你输入的大了" 9. elif [ $num -lt $sy_ran ];then 10. echo "你输入的小了" 11. else 12. echo "恭喜你猜对了,奖励你猜对号码对应的RMB" 13. echo "数额为: $sy_ran" 14. break 15. fi 16. done
可以再完善个冲金额功能和次数功能
1. [root@LB00 Day03]# cat caishu.sh 2. #!/bin/bash 3. sy_ran=`echo $((RANDOM%100+1))` 4. 5. chongzhi(){ 6. read -p "请输入充值的金额[1|2|3..10RRMB]: " jine 7. echo "恭喜你获得"$jine"次抽奖机会" 8. if ! [[ $jine =~ ^[0-9]+$ ]];then 9. echo 请输入数字 10. exit 11. fi 12. } 13. chongzhi 14. while true 15. do 16. if [ $jine -gt 0 ];then 17. jine=`echo "$jine-1"|bc` 18. 19. let i++ 20. read -p "请输入你要猜的数字[1-100]" num 21. if [[ ! $num =~ ^[0-9]+$ ]];then 22. echo 请输入数字 23. exit 24. fi 25. if [ $num -gt $sy_ran ];then 26. echo "你输入的大了" 27. elif [ $num -lt $sy_ran ];then 28. echo "你输入的小了" 29. else 30. echo "恭喜你猜对了,奖励你猜对号码对应的RMB" 31. echo "数额为: $sy_ran" 32. echo "共猜了"$i"次" 33. break 34. fi 35. else 36. echo "没有摇奖机会了,你可以选择继续充值" 37. chongzhi 38. fi 39. done 40. [root@LB00 Day03]# sh caishu.sh 41. 请输入充值的金额[1|2|3..10RRMB]: 5 42. 恭喜你获得5次抽奖机会 43. 请输入你要猜的数字[1-100]45 44. 你输入的小了 45. 请输入你要猜的数字[1-100]87 46. 你输入的大了 47. 请输入你要猜的数字[1-100]67 48. 你输入的大了 49. 请输入你要猜的数字[1-100]57 50. 你输入的小了 51. 请输入你要猜的数字[1-100]60 52. 你输入的大了 53. 没有摇奖机会了,你可以选择继续充值 54. 请输入充值的金额[1|2|3..10RRMB]: 5 55. 恭喜你获得5次抽奖机会 56. 请输入你要猜的数字[1-100]58 57. 恭喜你猜对了,奖励你猜对号码对应的RMB 58. 数额为: 58 59. 共猜了6次
可以再扩展下,让系统自己猜
1. [root@LB00 Day03]# cat caishu.sh 2. #!/bin/bash 3. menu(){ 4. echo -e "\t\t\t\033[31m 1.系统帮你猜 \033[0m" 5. echo -e "\t\t\t\033[32m 2.自己手动猜 \033[0m" 6. } 7. sy_ran=`echo $((RANDOM%100+1))` 8. da=100 9. xiao=1 10. num=0 11. chongzhi(){ 12. read -p "请输入充值的金额[1|2|3..10RRMB]: " jine 13. echo "恭喜你获得"$jine"次抽奖机会" 14. if ! [[ $jine =~ ^[0-9]+$ ]];then 15. echo 请输入数字 16. exit 17. fi 18. } 19. chongzhi 20. menu 21. read -p "请您输入编号选择猜数方式[1|2]: " fangshi 22. if [ $fangshi == 1 ];then 23. echo 您选择的是系统帮你猜,祝您好运! 24. while true 25. do 26. if [ $jine -gt 0 ];then 27. jine=`echo "$jine-1"|bc` 28. 29. let i++ 30. if [ $num == 0 ];then 31. num=`echo $((RANDOM%100+1))` 32. else 33. if [ $shangci == da ];then 34. da=`echo "$num-1"|bc` 35. #echo $da $xiao 36. num=`shuf -i $xiao-$da -n 1` 37. else 38. xiao=`echo "$num+1"|bc` 39. #echo $da $xiao 40. num=`shuf -i $xiao-$da -n 1` 41. fi 42. fi 43. echo "系统帮你猜的数字是$num" 44. sleep 1 45. if [[ ! $num =~ ^[0-9]+$ ]];then 46. echo 请输入数字 47. exit 48. fi 49. if [ $num -gt $sy_ran ];then 50. echo "系统猜的数字大了" 51. shangci=da 52. elif [ $num -lt $sy_ran ];then 53. echo "系统猜的数字小了" 54. shangci=xiao 55. else 56. echo "恭喜你,系统帮你猜对了,奖励是猜对号码对应的RMB" 57. echo "数额为: $sy_ran" 58. echo "共猜了"$i"次" 59. break 60. fi 61. else 62. echo "没有摇奖机会了,你可以选择继续充值" 63. chongzhi 64. fi 65. done 66. else 67. echo 您选择的是自己手动猜,祝您好运! 68. while true 69. do 70. if [ $jine -gt 0 ];then 71. jine=`echo "$jine-1"|bc` 72. 73. let i++ 74. read -p "请输入你要猜的数字[1-100]" num 75. if [[ ! $num =~ ^[0-9]+$ ]];then 76. echo 请输入数字 77. exit 78. fi 79. if [ $num -gt $sy_ran ];then 80. echo "你输入的大了" 81. elif [ $num -lt $sy_ran ];then 82. echo "你输入的小了" 83. else 84. echo "恭喜你猜对了,奖励你猜对号码对应的RMB" 85. echo "数额为: $sy_ran" 86. echo "共猜了"$i"次" 87. break 88. fi 89. else 90. echo "没有摇奖机会了,你可以选择继续充值" 91. chongzhi 92. fi 93. done 94. fi 95. [root@LB00 Day03]# sh caishu.sh 96. 请输入充值的金额[1|2|3..10RRMB]: 10 97. 恭喜你获得10次抽奖机会 98. 1.系统帮你猜 99. 2.自己手动猜 100. 请您输入编号选择猜数方式[1|2]: 1 101. 您选择的是系统帮你猜,祝您好运! 102. 系统帮你猜的数字是21 103. 系统猜的数字小了 104. 系统帮你猜的数字是95 105. 系统猜的数字大了 106. 系统帮你猜的数字是38 107. 系统猜的数字大了 108. 系统帮你猜的数字是22 109. 系统猜的数字小了 110. 系统帮你猜的数字是27 111. 系统猜的数字小了 112. 系统帮你猜的数字是37 113. 系统猜的数字大了 114. 系统帮你猜的数字是30 115. 系统猜的数字大了 116. 系统帮你猜的数字是29 117. 恭喜你,系统帮你猜对了,奖励是猜对号码对应的RMB 118. 数额为: 29 119. 共猜了8次
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!