博客

  • shell编程

    壹、脚本的环境准备

    一、#!/bin/bash 解释

     #!/bin/bash
     以 #! 开头
     用于指定命令解释器
     ​
     python 脚本
     #!/bin/python3
     ​
     推荐书写脚本时务必添加,尤其是脚本后续给系统服务使用、系统调用的场景。

    二、如何创建脚本的时候自动添加说明信息

     #1.修改 /etc/vimrc(红帽系统)或 /etc/vim/vimrc(ubuntu、debian 系统)
     #2.增加以下内容
     autocmd BufNewFile *.py,*.cc,*.sh,*.java,*.bash exec ":call SetTitle()"
     ​
     func SetTitle()  
         if expand("%:e") =~ 'sh\|bash'  
            call setline(1,"#!/bin/bash")
            call setline(2, "##############################################################")  
            call setline(3, "# File Name: ".expand("%"))
            call setline(4, "# Version: V1.0")
            call setline(5, "# Author: Newman")
            call setline(6, "# Organization: www.oldboyedu.com")
            call setline(7, "# Description:")
            call setline(8, "##############################################################")
            call setline(9, "")
        endif  
     endfunc
     #3.使用 vi/vim 创建以.bash 或.sh 结尾的文件(如 vim lidao.sh、vim oldboy.bash、vim sys_check.sh)。

    贰、变量

    变量分类说明
    普通变量(局部变量)最常用,命名不能以数字开头命名最好体现出变量功能 ip=sys_ip net_ipecho ${name}避免金庸新作问题
    特殊变量$? $n $0 $# $*$@判断,循环搭配使用
    环境变量(全局变量)PATH,PS1,LANG,UIDUID主要用于检查是否为root

    一、普通变量

     “金庸新作” 问题示例:
      name=lidao
      echo $nameoldboy
      echo ${name} oldboy

    二、特殊变量

    常用必会特殊变量说明应用场景
    $0脚本名字错误输出时,提示用户如何使用脚本,结合判断使用
    $n位置参数,命令行参数内容通过$1、$2、$… 形式传递到脚本中,实现简易交互 / 传参脚本检查常用,是命令行与脚本的桥梁
    $#脚本参数个数与判断结合使用,检查参数个数
    $*取出脚本所有参数,相当于写$1、$2…$n与循环搭配
    $@取出脚本所有参数,相当于写$1、$2…$n与循环搭配
    $?检查上一个命令是否执行成功echo $?返回值是0成功 返回值是其他失败
    a、 案例 01 – 检查指定服务状态
     脚本内容(01.check_service.sh):
     #!/bin/bash
     #File Name: 01.check_service.sh
     #Version:V1.0
     #Author:lidao996
     #Organization:www.oldboyedu.com
     #Description:
     ​
     #1.vars
     name=$1
     #2.systemctl
     echo"请睁开眼睛看服务是否启动与开机自启动,后续改为if判断"
     systemctl is-active $name
     systemctl is-enabled $name
    b、案例 02 – 检查指定的用户是否存在
     脚本内容(02.check_user.sh):
     #!/bin/bash
     #FileName:02.check_user.sh#Version:V1.0
     #Author:lidao996
     #Organization:www.oldboyedu.com
     #Description:
     #1.vars
     name=$1
     ​
     #2.id
     id $name
    c、案例 03 – 改造案例 01 和 02 增加脚本参数个数判断功能
     改造后脚本(01.check_service.sh):
     #!/bin/bash
     #FileName:01.check_service.sh
     #Version:V1.0#Author:lidao996
     #Organization:www.oldboyedu.com#Description:
     #1.vars
     name=$1
     #2.check vars
     if [ $# -eq 0 ]
     then echo "Usage: bash $0 server name"
     exit 1
     fi
     #2.systemctl echo"请睁开眼睛看服务是否启动与开机自启动,后续改为if判断"
     systemctl is-active $name
     systemct is-enabled $name
    d、案例 04 – 案例 01、案例 02 改造成批量形式
     改造后脚本(01.check_service.sh):
     #!/bin/bash
     #File Name: 01.check_service.sh
     #Version:V1.0
     #Author:lidao996
     #Organization:www.oldboyedu.com
     #Description:
     #1.varsname="$*"
     #2.check vars
     if [ $# -eq 0 ]
     then echo "Usage:bash $0 server name"
     exit 1
     fi
     #2.systemctl echo"请睁开眼睛看服务是否启动与开机自启动,后续改为if判断"
     systemctl is-active $name
     systemctl is-enabled $name
    e、案例 05 – 回收站脚本替代 rm 命令
     #1.准备操作:
     df -h /tmp/ 结果示例:
     1.5G 44K 1.5G 1% /tmp
     tmp 目录属于 tmpfs(内存),系统重启后内容消失
     #2.执行以下命令
     umount -lf /tmp;
     systemctl mask tmp.mount
     #3.操作上面两个命令后df -h /tmp/结果示例
      47G   12G   36G   25% /
     
      脚本内容(05.recycle.sh):
     #!/bin/bash
     #File Name:/server/scripts/shell/05.recycle.sh
     #Version:V1.0
     #Author:lidao996
     #Organization:www.oldboyedu.com
     #Description:
     ​
     #1.vars
     files="$∗"
     recycle_dir=`mktemp -d`
     ​
     #2.check
     if [ $# -eq 0 ]
     then echo "Usage: bash $0 files dirs"
     exit 1
     fi
     ​
     #3.mv
     mv  $files  $recycle_dir
     ​
     #4.结果输出
     echo "$files已经放到回收站中,目录$recycle_dir"
     ​
     别名配置:
     临时生效:alias rm='bash /server/scripts/shell/05.recycle.sh'
     永久生效:将上面的命令写入到 vim /etc/profile中
     source /etc/profile
     创建一个文件
     touch a.txt
     删除文件测试
     rm a.txt

    三、环境变量

    环境变量作用
    PATH存放命令的位置 / 目录
    PS1命令行格式
    LANGlanguage 语言、字符集
    UID获取当前用户的 UID,搭配判断是否为 root
    f、案例 06 – 安装指定的软件包
     脚本内容(06.install_rpm.sh):
     #!/bin/bash
     #File Name: 06.install_rpm.sh
     #Version:V1.0
     #Author:lidao996
     #Organization:www.oldboyedu.com
     #Description:
     #1.vars
     names="$@"
     #2.root?if [ UID−ne0]
     then echo"You are not root,use root user."
     exit 1
     fi
     #3.$#
     if [ $# -eq 0 ]
     then echo "USAGE: bash $0 packages.."
     exit 2
     fi
     #4.yum
     yum install -y $names
     #5. 待补充检查
     ​
     #6.先用普通用户再用root用户测试
     bash 06.install_rpm.sh tree lrzsz
  • 世界,您好!

    欢迎使用 WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!