shell脚本

Posted 慕|白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本相关的知识,希望对你有一定的参考价值。

shell编程入门

  • 什么是shell

    • SHELL 就是一个命令解释器
  • shell编程的目的

    • 实现自动化操作方式,代替手工的繁琐步骤
  • shell编程的用户

    基础配置:系统初始化操作、系统更新、内核调整等等 
    – 安装程序:自动部署 LNMP、LAMP、mysql 等等 
    – 配置变更:nginx 配置、MySQL 配置、Redis 配置等等 
    – 业务部署:配合 git、jenkins 等实现自动化持续交付 
    – 日常备份:脚本对项目或者软件实现全备份或者增量备份等 
    – 信息采集:硬件、系统、服务、网络等各种数据的自动采集 
    – 日志分析:获取日志、排序、去重、统计、分析 
    – 服务扩容:监控服务器就请你信息,脚本程序自动化扩容部署
    
    减少重复工作,周期性工作,降低工作量
    
  • shell编程的核心

    • 批量执行Linux的命令的操作,将手工执行多次的命令,转换到脚本程序通过命令一次性执行

    • 脚本基本规范

      ? 脚本存放在 scripts/目录中 
      ? 开头添加#!/bin/bash,确定 bash 执行命令 
      ? 附带作者及版权信息 
      ? 脚本扩展名为*.sh 
      ? 脚本中尽量不用中文 
      ? 成对的符号一次书写完成
      ? 循环格式一次性输入完成
      
    • 注释和输入输出

      注释:除第一行外,以#行注释
      输出 read 读取用户输入的信息
      -p:打印提示信息
      -s:用户输入信息不明文显示
      echo:打印信息,类似于python的print()函数
      echo -n 打印信息不换行
      
  • 执行shell 脚本

    mkdir scripts
    vim test.sh
    #!/bin/bash
    echo "hello world"
    
    执行上述脚本
    1.  bash test.sh
    2.  sh.test.sh
    3. chmod u+x test.sh
    ./test.sh
    
  • 变量

    • 什么是变量:变量时 shell 传递数据的一种方式,作为一个临时存储数据的容器,可以存放 数据并在其他需要的地方直接通过变量名称使用对应的数据。

    • 命名规则:

    • ? 变量定义时要求字母、数字或者下划线组成,数字不能开头。

    • ? 大小写敏感

    • 项目规范:见名知意、下划线命名法

      vim test2.sh
      #!/bin/bash
      name=tom
      echo "name:$name"
      echo ‘name:$name‘
      echo $name
      echo ${name}_01
      
      变量赋值,使用“=”符号,将=右边的结果赋值给左边的变量
      等号两边不能有空格
      定义的变量不要和系统命令冲突
      
      
  • 程序控制结构

    顺序结构,选择结构,循环结构

    • 1.选择结构

      单分支
      if 条件;then
      	条件为True要执行的代码
      fi
      案例:查看ls命令在文件系统环境变量中的位置,查看返回ok  which ls
      vim 1.sh
      #!/bin/bash
      if which ls;then
      	echo ok
      fi
      
      
      双分支
      if 条件;then
      	条件为True要执行的代码
      else
      	其他情况
      fi
      
      案例:搜索当前用户有没有zhang,找到返回OK,找不到返回error
      vim 2.sh
      #!/bin/bash
      if grep zhang /etc/passwd;then
      	echo "ok"
      else
      	echo "error"
      fi
      
      
      多分支
      if [ 条件1 ];then
      	执行代码1
      elif [ 条件2 ];then
          执行代码2
      elif [ 条件3 ];then
          执行代码3
      else
      	其他情况
      fi
      
      案例操作:输入1,输出选项1,输入2,输出选项2
      vim 3.sh
      #!/bin/bash
      read -p "请输入功能选项": choice
      if [ $choice -eq 1 ];then
      	echo "选项1"
      elif [ $choice -eq 2 ];then
      	echo "选项2"
      elif [ $choice -eq 3 ];then
      	echo "选项3"	
      else 
      	echo "没有此选项"
      fi
      
      = 判断相关字符是否相等
      案例操作,用户输入“Q”退出系统.输入“C”,继续
      vim 4.sh
      #!/bin/bash
      read -p "是否退出系统?(Q/退出,C/继续)" ret
      if [ $ret = "Q" ];then
      	echo "退出系统"
      elif [ $ret = "C" ];then
      	echo "continue"
      else
      	echo "指令错误"
      fi
      
    • case选择结构

      case 变量 in 
      	变量 1) 
      	命令序列 1
      	;; 
      	变量 2) 
      	命令序列 2
      	;; 
      	*) 
      无匹配后命令序列 
      esac
      
      案例操作:显示功能选项界面,输入序号好功能名称都可以执行
      vim 5.sh
      #!/bin/bash
      echo "=============="
      echo "	1.login"
      echo "	2.register"
      echo "	3.exit"
      echo "=============="
      read -p "请输入功能选项" choice
      case $choice in
      	1|login)
      	echo "欢迎登录"
      	;;
      	2|register)
      	echo "欢迎注册"
      	;;
      	3|exit)
      	echo "退出系统"
      	;;
      	*)
      esac
      
  • for 循环

    基本操作语法: 
    for 变量名 in [取值列表] 
    do 
    循环中重复执行的代码 
    done 
    案例:检查所有的ip地址通讯
    vim 6.sh
    #!/bin/bash
    hosts="192.168.1.1 192.168.1.2 192.168.1.3"
    for h in $hosts
    do
    	echo "开始检查$h通讯"
    	sleep 1
    	echo "检查$h通过"
    done
    echo "所有ip检查通过"
    
  • while 循环

    while 条件
    do
    循环要执行的代码
    done
    
    #案例操作:计算1-100之间的和
    vim 7.sh
    #!/bin/bash
    num=1
    sum=0
    while [ $num -le 100 ]
    do
    	sum=$[ $num + $sum ]
    	let num+=1
    done
    echo 1-100的和是$sum
    
    
  • 函数的声明和调用

    function 函数名称(){
    函数中的代码
    }
    
    快捷写法
    函数名(){
    函数中的代码
    }
    
    案例操作
    vim 8.sh
    #!/bin/bash
    function func1(){
    echo 执行func1函数
    }
    func2(){
    echo 执行func2函数
    }
    func1
    func2
    

    检查输入的ip地址是否可以ping通

    vim 9.sh
    #!/bin/bash
    read -p "请输入你要测试的ip地址" IP
    ping -w1 -c1 $IP>/dev/null
    #echo $?
    if [ $? -eq 0 ];then
    	echo "可以正常通信"
    else
    	echo "不能通信"
    fi
    
    

以上是关于shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

常用python日期日志获取内容循环的代码片段

shell脚本引用expect

Shell脚本切割日志

Eclipse 中的通用代码片段或模板

Python如何调用别人写好的脚本