• shell脚本编程


    编程语言常识

    编译器,解释器
     
    编程语言:机器语言、汇编语言、高级语言
     
    静态语言:编译型语言
         强类型(变量在使用前一定要先声明)
         事先转换成可执行格式
         C、C++、JAVA、C#
     
    动态语言:解释型语言, on the fly
         弱类型
         边解释边执行
         PHP、SHELL、python、perl
     
    面向过程:Shell, C
    面向对象: JAVA, Python, perl, C++
     

    shell编程基础

    变量概念

    变量:内存空间(当我们用变量名去引用这个变量时称为有命名的内存空间)
    内存:编址的存储单元
    变量类型作用:事先确定数据的存储格式和长度
      字符
      数值:整形,浮点型
      布尔型
     

    bash变量

    bash变量类型:

       环境变量
       本地变量(包含局部变量)
       位置变量
       特殊变量

    环境变量

    作用域:为当前shell进程及其子进程;

    环境变量声明导出方法:(1)声明时直接导出:export VARNAME=VALUE
               (2)先声明后导出:VARNAME=VALUE
                          export VARNAME
     
    注意:脚本在执行时会启动一个子shell进程;
         命令行中启动的脚本会继承当前shell环境变量;
         系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
     

    本地变量

    (set可省略) VARNAME=VALUE: 作用域为整个bash进程;

    局部变量

    local VARNAME=VALUE:作用域为当前代码段;

    位置变量:用来引用脚本的参数

    $1, $2, ...

    特殊变量:用来保存某些特殊数据

    $?: 上一个命令的执行状态返回值;

    程序执行,可能有两类返回值:
       (1)程序执行结果
       (2)程序状态返回代码(0-255)
            0: 正确执行
            1-255:错误执行,1,2,127系统预留;

    $#:参数的个数
    $*: 参数列表
    $@:参数列表

    撤销环境变量或本地变量:

    unset VARNAME

    查看当shell中变量(包括环境变量和本地变量):

    set

    查看当前shell中的环境变量:

    printenv
    env
    export

    脚本

    脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序

    为了让计算机知道如何去解释脚本,脚本的第一行都要加上一个 shebang(魔数):#!/bin/bash

    条件测试

    条件测试类型:

       整数测试
       字符测试
       文件测试

    条件测试的表达式:

       [ expression ] (命令测试法)
       [[ expression ]] (关键字测试法)
       test expression
     

    整数测试:

       -eq: 测试两个整数是否相等;比如 [ $A -eq $B ]
       -ne: 测试两个整数是否不等;不等,为真;相等,为假;
       -gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
       -lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
       -ge: 大于或等于
       -le:小于或等于
     

    文件测试: 

    -e FILE:测试文件是否存在
    -f FILE: 测试文件是否为普通文件
    -d FILE: 测试指定路径是否为目录
    -r FILE: 测试当前用户对指定文件是否有读取权限;
    -w
    -x
     

    字符测试:

    ==:测试是否相等,相等为真,不等为假
    !=: 测试是否不等,不等为真,等为假
    >
    <
    (注意:上述符号两边要加空格)
    -n string: 测试指定字符串是否为空,空则真,不空则假
    -z string: 测试指定字符串是否不空,不空为真,空则为假
     

    命令的间逻辑关系: 

    逻辑与: &&
    逻辑或: ||

    非:!

    if语句

    if 判断条件

    then

    statement

    else

    ststement

    fi

    或者

    if 判断条件;then

    statement

    else

    ststement

    fi

    多分支的if语句:

    if 判断条件1; then
      statement1
      ...
    elif 判断条件2; then
      statement2
      ...
    elif 判断条件3; then
      statement3
      ...
    else
      statement4
      ...
    fi

    循环

    for 循环

    for 变量 in 列表; do
      循环体
    done

    例子:对1到100求和

    #!/bin/bash
    #
    declare -i SUM=0
    
    for I in {1..100}; do
      let SUM=$[$SUM+$I]
    done
    
    echo "The sum is: $SUM."

    while

    语法:
     while CONDITION; do
       statement
       ...
     done

     例子:对1到100求和

    #!/bin/bash
    declare -i I=1
    declare -i SUM=0
    
    while [ $I -le 100 ]; do
    let SUM+=$I
    let I++
    done
    
    echo $SUM

    列表生成

    (1){1..100}
    (2)seq 起始数 步进长度 结束数

    退出脚本

    exit

    exit n (n为退出状态码)

    如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码;

    测试脚本有没有语法错误

    bash -n 脚本

    单步执行:显示脚本执行的每个步骤

    bash -x 脚本

     
     
  • 相关阅读:
    无需认证的mail,适用于ZABBIX等运维系统
    Linux交换分区使用过多的处理办法
    zookeeper的单实例和伪集群部署
    Zookeeper分布式集群原理与功能
    Nginx禁止IP直接访问网站
    镜像站地址汇总
    Nginx反向代理后端多节点下故障节点的排除思路
    Redis主从复制与高可用方案
    http_proxy_module模块常用参数
    Nginx实现负载均衡的几种方式
  • 原文地址:https://www.cnblogs.com/xumaomao/p/11901622.html
Copyright © 2020-2023  润新知