shell

67 阅读1分钟

shell脚本

  1. 构成:

    image-20230415185407525.png

  2. 语法和命令

    • 变量

image-20230415185605631.png

-   自定义变量

    ```
    #变量名=变量值(等号左右不能有空格)
    page_size=1
    page_num=2# 将命令复制给变量
    _ls=ls
    ​
    #将命令结果赋值给变量
    first_list=$(ls-a)
    ​
    # 默认字符串,不会进行 + 运算
    total=page_size*page_num #(错误)#声明变量为整型
    let tatal=page_size*page_num
    declare -i total=page_size*page_num
    ​
    # 导出环境
    export total
    ​
    declare -x total
    ```

    注意:

image-20230415190201802.png - 环境变量

image-20230415190248131.png - 运算符和引用

image-20230415190618548.png

-   管道

    作用:将前一个命令的结果传递给后面的命令

    语法:cmd1 | cmd2

    要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以实用xargs预处理

    注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用`set -o pipefail`设置shell遇到的管道错误退出。

-   重定向

    

image-20230415191007475.png

-   判断命令

    shell中提供了`test`、`[`、`[[`三种判断符号可用于:

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

    语法:

    -   `test condition`
    -   `[condition]`
    -   `[[condition]]`

-   分支语句

    ```
    # 语法1:
    if condition;then
        程序段
    elif condition;then
        程序段
    else
        程序员
    fi
    ​
    # 语法2
    case $变量in:
        "第一个变量内容")
        程序段
        ;;
        "第一个变量内容")
        程序段
        ;;
        *)
        程序段
        ;;
    esac
    ```

-   循环

    -   `while`循环

        `while condition;do 程序段;done`

    -   `util`循环

        `utill cindition;do 程序段done`

    -   `for`循环

        `for var in [words...];do 程序段;done`

-   函数

    -   语法一

        `funcName(){echo"abc";}`

    -   语法二

        `function funcName(){echo"abc";}`

-   模块化

    模块化的原理是在当前shell内执行函数文件,方式:

    `source[函数库的路径]`

    

image-20230415192429134.png

  1. 执行过程和原理

    • shell脚本一般以.sh结尾,也可以没有,这是一个约定。

      #! /bin/bash#! /usr/bin/env bash
      
    • 启动方式

      # 文件名运行
      ./filename.sh
      ​
      # 解释器运行
      bash ./filename.sh
      ​
      # source运行
      source ./filename.sh
      
    • 执行过程

      • 字符解析
      • shell展开
      • 重定向,将stdin、stdout、stderr的文件描述进行只想变更
      • 执行命令
      • 收集状态并返回
  2. 总结

image-20230415193448043.png