0%

shell-script的学习和使用

shell-script的学习和使用

注意事项

  1. 指令的执行是从上而下、从左到右;
  2. 指令、选项、参数间的多个空白都会被忽略;
  3. 空白行也会被忽略,Tab空白也视为空白行;
  4. 如果读取到一个Enter(CR)符号,就开始执行该行命令;
  5. 如果一行的内容太多,可以使用\Enter 来延伸到下一行;
  6. # 是注释符号,该符号后面的数据全部被视为注释文字;
  7. 脚本需要有rx权限才能被执行,脚本的执行可通过绝对路径、相对路径、变量PATH实现,除此之外,还可以通过bash程序来执行bash script.sh or sh script.sh;
  8. 主文件夹下的~/bin目录默认被设置到${PATH}中,也可以将脚本存放到~/bin下,直接输入script.sh执行脚本;

基础

  • 脚本第一行声明脚本使用的shell名称,声明的方式是#!/bin/bash ;
    • 声明的符号注意与注释符号#区分;
  • 在脚本中强烈建议加注内容与功能、版本信息、作者与联络方式、创建日期、历史记录等信息
  • 主环境变量的声明PATH=${PATH},并全局生效export PATH ;
  • 执行结果可以使用变量$?来观察,我们可以使用exit指令让程序中断,并回传一个数值给系统,$?=0表示指令成功执行;
  • 数值的运算格式$((x运算符)) 可使用的运算符有+ - * / %

test指令

  • test指令常用的选项
    • -e 该文件是否存在
    • -f 该文件是否存在并且为文件
    • -d 该文件是否存在并且为目录
    • -z 判断字符串是否为0,若为空字符,则为true
    • 反状态
    • -rwx 文件权限的判断
    • -s 文件名是否存在并且为非空白文件
    • -a 条件and
    • -o 条件or
    • -eq 相等
    • -ne 不相等
    • -gt 大于
    • -lt 小于
    • -qe 大于等于
    • -le 小于等于

判断符号[]

  • 除了使用test指令判断外,还可以使用符号[]来进行判断,使用符号判断,需要注意以下几点:
    1. 在符号内的每个元素都需要使用空白格分割;
    2. 在符号内的变量,最好都使用双引号括起来;
    3. 在符号内的常数,最好使用单引号或双引号括起来;
  • 命令格式:[ "变量1" == "变量2" ],多个条件的可以使用-a -o 连接

脚本的默认变量

  • $# 脚本的参数个数
  • $@ 脚本的全部参数
  • ${n} n代表数字,第几个参数
  • ${0} 代表脚本程序名
  • 脚本变量的偏移使用命令shift ,在命令符后可接数字,代表偏移的数量

条件判断

  • if…then单层判断命令格式s

    1
    2
    3
    if [条件判断]; then 
    command
    fi
  • if…then多层判断命令格式

    1
    2
    3
    4
    5
    6
    7
    if [条件判断1]; then
    command1
    elif [条件判断1]; then
    command2
    else
    command3
    fi

case ..esac判断

  • 用于多个既定变量内容的判断,命令格式:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    case ${变量} in
    "内容1")
    command1
    ;;
    "内容2")
    command2
    ;;
    *)
    command3
    ;;
    esac

function功能

  • 使用function可以创建函数,创建的函数需要在脚本的最前面,函数的格式:
    1
    2
    3
    function fname (){
    command
    }

循环loop功能

  • 不定循环while..do..done当条件成立时,执行循环,当条件不成立时,停止循环。命令格式:

    1
    2
    3
    4
    while [ 条件 ]  # 中括号内是判断式
    do # 开始循环
    command
    done # 结束循环
  • 不定循环until..do..done当条件成立时,终止循环,否则就持续进入循环。命令格式:

    1
    2
    3
    4
    until [ 条件 ]
    do
    command
    done
  • 固定循环for..do..done,已经知道循环几次。命令格式:

    1
    2
    3
    4
    for var in con1 con2 con3
    do
    command
    done
  • 固定循环for的另一种格式:

    1
    2
    3
    4
    for ( ( 初始值; 限制值; 执行步阶 ) )
    do
    command
    done
  • 使用循环和function功能测试局域网内存活的主机ip地址
    ping-script
    ping-result

sh的debug

  • 命令格式sh [-nvx] shell.sh
    • -n 不执行脚本,仅检查语法
    • -v 在执行脚本前,先将脚本的内容输出到屏幕中
    • -x 将使用到的脚本内容显示到屏幕上