Linux-Ch05 Shell脚本编程

Shell脚本编程的概念

基本概念

shell是指系统内核程序之上的一系列程序的集合。

  • Bourne Shell(sh)、Bourne Again Shell(bash)等

Shell脚本是一个可执行的纯文本文件,由多个Shell命令组成。

  • 自上而下,从左到右一次解释执行,错误即中断运行
  • 命令、参数间的多个空格和空白行均被忽略
  • 读取到第一个[enter]符号即开始运行
  • 一般以.sh作为后缀名

Shell脚本的两种执行方式

  1. 直接命令执行,必须有Shell脚本文件的r、x权限
  2. bash进程执行,只需要有Shell脚本文件的r权限

Shell命令分类:

  1. 内部命令

  2. 外部命令

  3. 查看命令类型:

    1
    2
    3
    4
    type [-tpa] 命令名
    # -t: 显示命令类型(内、外、别名)
    # -p:显示外部命令的完整文件名
    # -a:将$PATH中所有命令全部显示

自定义命令别名:

1
alias 别名='命令字符串'

VI/VIM文本编辑器

  • vi:一个文本编辑程序
  • vim:vi的加强版

Shell脚本编程

变量与输出

  • echo命令

    显示一行文本内容

    • -n:结尾不换行
    • -e:打开反斜杠转义
    • -E:取消反斜杠转义

    echo后的内容:

    • 单引号内:原样输出
    • 双引号内:转义或变量求值
  • 变量的表示

    1. 变量的表示:$变量名 或 ${变量名}

    2. 变量的设置与取消:变量名=变量值、unset

    3. 变量的显示:echo

    4. 环境变量相关操作:env、export

    5. 变量输入:read

      1
      read -p ”提示语句“ -t 输入变量时等待的秒数 变量名

    6. 数组声明:declare 、typeset

      1
      2
      3
      4
      5
      declare [-aixr] 变量名
      # -a:数组
      # -i:int
      # -x:环境变量
      # -r:只读变量

条件和循环语句

  • if语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 单if
    if [表达式]; then
    语句
    fi

    # if-else
    if [表达式]; then
    语句
    else
    语句
    fi

    # if-elseif
    if [表达式]; then
    语句
    elif [表达式]; then
    语句
    else
    语句
    fi

  • case语句

    1
    2
    3
    4
    5
    6
    7
    8
    case $变量名 in
    "变量值")
    语句
    ;;
    "变量值")
    语句
    ;;
    esac

  • while语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 第一种形式,类似于while do
    while [ 条件表达式 ]
    do
    语句
    done

    # 第二种形式,类似于do while
    until [ 条件表达式 ]
    do
    语句
    done

  • for循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 1
    for 变量名 in value1 value2 value3...
    do
    语句
    done

    # 2
    for ((初始值;终止条件;执行步长))
    do
    语句
    done

函数和其他

1
2
3
4
5
6
7
8
# 函数声明
function 函数名()
{
程序段
}

# 函数调用,函数名后面可以接参数,以空格隔开,函数中可以通过 $1,$2...访问,$0为函数名
函数名 $变量1 $变量2 ...
1
2
3
4
5
6
# 脚本调试
sh [-nvx] 脚本名.sh

# -n: 不执行,检查语法
# -v: 执行前将内容显示在屏幕
# -x:跟踪执行过程

grep、sed、awk

  • grep:适合查找和匹配
  • sed:适合对文本进行编辑
  • awk:适合格式化文本