翼度科技»论坛 云主机 LINUX 查看内容

Shell---控制流程

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
操作系统:

RHEL7.x 或CentOS 7.x

  • 最小化安装
  • 配置好固定的IP,能访问互联网
  • 配置好yum源(yum repolist 可以查看yum源)

    • 本地光盘

      • 挂载光盘,开机自动挂载

        • vim   + /etc/fstable
        • /dev/sr0               /mnt                     iso9660 defaults        0 0

      • 创建挂载点目录:

        • mkdir /media/cdrom

      • 挂载:mount -a
      • 配置yum源:

        • yum-config-manger --add-repo=file:/// media/cdrom
        • echo "gpgcheck = 0" >> /etc/yum.repos.d/media_cdrom.repo


    • EPEL

      • aliyun sohu 中科大 清华 网易


开发环境:vim
查看系统shell类型:
  1. [root@template ~]# cat /etc/shells
  2. /bin/sh
  3. /bin/bash
  4. /usr/bin/sh
  5. /usr/bin/bash
复制代码
查看当前默认shell:
  1. [root@template ~]# echo $SHELL
  2. /bin/bash
复制代码
快速如何快速生成脚本开头的版本版权注释信息
  1. [root@template ~]# cat ~/.vimrc
  2. autocmd BufNewFile *.go,*.py,*.cc,*.sh,*.java exec ":call SetTitle()"
  3. func SetTitle()
  4. if expand("%:e") == 'sh'
  5. call setline(1,"#!/bin/bash")
  6. call setline(2,"#########################")
  7. call setline(3,"#File name:".expand("%"))
  8. call setline(4,"#Version:v1.0")
  9. call setline(5,"#Email:admin@test.com")
  10. call setline(6,"#Created time:".strftime("%F %T"))
  11. call setline(7,"#Description:")
  12. call setline(8,"#########################")
  13. call setline(9,"")
  14. endif
  15. endfunc
复制代码
修改Tab缩进
  1. 在/etc/vim/下有两个文件,分别为vimrc 和vimrc.tiny
  2. 在vimrc文件中加入:set tabstop=4
复制代码
流程控制与判断练习:

1、ping主机测试,查看主机是否存活
  1. [root@template chap04]# cat ping.sh
  2. #!/bin/bash
  3. #########################
  4. #File name:ping.sh
  5. #Version:v1.0
  6. #Email:admin@test.com
  7. #Created time:2023-03-23 17:32:18
  8. #Description:
  9. #########################
  10. read -p "please enter your host:" host
  11. if ping -c2 $host &> /dev/null
  12. then
  13.         echo "$host is running"
  14. else
  15.         echo "$host is down"
  16. fi
复制代码
2、判断一个用户是否存在
  1. [root@template chap04]# cat user.sh
  2. #!/bin/bash
  3. #########################
  4. #File name:user.sh
  5. #Version:v1.0
  6. #Email:admin@test.com
  7. #Created time:2023-03-23 17:45:03
  8. #Description:
  9. #########################
  10. read -p "please enter a username:" username
  11. if id $username &> /dev/null
  12. then
  13.         echo "$username is exist"
  14. else
  15.         echo " $username is not exist "
  16. fi
复制代码
3、判断当前内核主版本是否为3,且次版本是否大于10
  1. [root@template chap04]# cat sys.sh
  2. #!/bin/bash
  3. #########################
  4. #File name:sys.sh
  5. #Version:v1.0
  6. #Email:admin@test.com
  7. #Created time:2023-03-23 17:52:56
  8. #Description:
  9. main_version=`uname  -r | awk -F . '{print $1 }'`
  10. minor_version=`uname -r | awk -F . '{print $2}'`
  11. if [ "$main_version"  -eq 3 ] && [ "$minor_version" -ge 10 ]
  12.   then
  13.      echo "主版本是:$main_version 次版本是:$minor_version"
  14. else
  15.        echo "不满足条件,此系统的主版本是:$main_version 次版本是:$minor_version"
  16. fi
复制代码
4、判断vsftpd软件包是否安装,如果没有则自动安装
  1. #!/bin/bash
  2. #########################
  3. #File name:isvsftp.sh
  4. #Version:v1.0
  5. #Email:admin@test.com
  6. #Created time:2023-03-23 18:05:56
  7. #Description:
  8. #########################
  9. if rpm -qa | grep vsftpd &> /dev/null
  10. then
  11.         echo "vsftp is exist"
  12. else
  13.         echo "vsftp is not exist"
  14.         read -p "please enter your choice:" choice
  15.         if [ $choice -eq 1 ]
  16.                 then
  17.                         yum install vsftpd -y &> /dev/null
  18.         else
  19.                 echo " break and uninstall"
  20.         fi
  21. fi
  22. # 测试结果:最初环境没有安装,选择时随机输入,最后选择安装,最后一次测试检查是否安装成
  23. [root@template chap04]# ./isvsftp.sh
  24. vsftp is not exist
  25. please enter your choice:2
  26. break and uninstall
  27. [root@template chap04]# ./isvsftp.sh
  28. vsftp is not exist
  29. please enter your choice:1
  30. [root@template chap04]# ./isvsftp.sh
  31. vsftp is exist
复制代码
5、判断httpd是否运行
  1. # 也不算完整:先检测是否安装htppd.service此软件,注意centos7版本中自带一个httpd-xxx的工具,所以在写服务时最好加上httpd.service,程序流程:如果包存在,直接输出active,如果不存在就选择是否安装
  2. [root@template chap04]# cat httpd.sh
  3. #!/bin/bash
  4. #########################
  5. #File name:httpd.sh
  6. #Version:v1.0
  7. #Email:admin@test.com
  8. #Created time:2023-03-23 18:20:59
  9. #Description:
  10. #########################
  11. if rpm -qa |  grep httpd.service &> /dev/null
  12. then
  13.         echo "system  `systemctl is-active httpd`"
  14. else
  15.         echo "httpd is uninstall"
  16.         read -p " please enter your choice : " choice
  17.         if [ $choice -eq 1 ]
  18.         then
  19.                 yum install httpd -y &> /dev/null
  20.                 systemctl restart httpd
  21.         else
  22.                 echo " break and uninstall"
  23.         fi
  24. fi
复制代码
6、判断指定的主机是否能ping通,必须使用$1变量
  1. [root@template chap04]# cat ping2.sh
  2. #!/bin/bash
  3. #########################
  4. #File name:ping2.sh
  5. #Version:v1.0
  6. #Email:admin@test.com
  7. #Created time:2023-03-23 18:55:21
  8. #Description:
  9. #########################
  10. if ping -c1 $1 &> /dev/null
  11. then
  12.         echo "$1 is runing"
  13. else
  14.         echo "$1 is dead"
  15. fi
  16. [root@template chap04]# ./ping2.sh  192.168.11.10
  17. 192.168.11.10 is runing
  18. [root@template chap04]# ./ping2.sh  baidu.com
  19. baidu.com is runing
复制代码
7、报警脚本,要求如下

根分区剩余空间小于20%
内存已用空间大于80%
向用户alice发送告警邮件
配合crond每5分钟检查一次
  1. yum install mailx -y &> /dev/null
  2. #!/bin/bash
  3. total_mem=$(free -m | tr -s " " | cut -d " " -f 2 | head -2 | tail -1)
  4. used_mem=$(free -m | tr -s " " | cut -d " " -f 3 | head -2 | tail -1)
  5. used_memper=$(echo "scale=2;$used_mem/$total_mem*100" | bc)
  6. total_root=$(df | grep "/"$ |tr -s " " | cut -d " " -f 2)
  7. used_root=$(df | grep "/"$ |tr -s " " | cut -d " " -f 4)
  8. free_rootper=$(echo "scale=2;$used_root/$total_root*100" | bc)
  9. v1=$(echo "used_memper > 80" | bc)
  10. v2=$(echo "free_rootper < 20" | bc)
  11. if [ $v1 -eq 1 ];then
  12.   echo "内存已用空间大于80%" | mail -s "警告信息" alice
  13. elif [ $v2 -eq 1 ];then
  14.   echo "根分区剩余空间小于20%" | mail -s "警告信息" alice
  15. else
  16.   echo "正常使用"
  17. fi
复制代码
8、判断用户输入的是否是数字,如果是数字判断该数字是否大于10
  1. [root@template chap04]# cat num.sh
  2. #!/bin/bash
  3. read -p "please input a num:" num
  4. if echo  " $num" | grep " [ 0-9 ]" &> /dev/null
  5. then
  6.         if [ $num -gt 10 ]
  7.         then
  8.                 echo "$num is more than 10"
  9.         else
  10.                 echo "$num is less than 10"
  11.         fi
  12. else
  13.         echo "input a num!!!"
  14. fi
复制代码
9、计算用户输入的任意两个整数的和、差、乘积、商、余数
  1. a=$1
  2. b=$2
  3. if [ $# -eq 2 ]
  4. then
  5.   if [[ "$a" =~ ^[0-9]*$ && "$b" =~ ^[0-9]*$ ]]
  6.   then
  7.     echo "a、b Is an integer"
  8.     echo a+b=$((a+b))
  9.     echo a-b=$((a-b))
  10.     echo a*b=$((a*b))
  11.     echo a/b=$((a/b))
  12.     echo a%b=$((a%b))
  13.   else
  14.     echo "a,b Is  not an integer"
  15.     exit 0
  16.   fi
  17. else
  18.   echo "The number of parameters is 2"
  19.   exit 0
  20. fi
复制代码
出处:http://www.cnblogs.com/sre-chan/-------------------------------------------
个性签名:今天做了别人不想做的事,明天你就做得到别人做不到的事,尝试你都不敢,你拿什么赢!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

来源:https://www.cnblogs.com/sre-chan/p/17247478.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具