• Bash学习笔记


    Bash的类型与配置

    Login Bash

    运行Login Bash脚本共会初始化四个配置文件,分别是全局配置文件/etc/profile,以及用户配置文件~/.profile, ~/.bash_login, ~/.bash_profile

    全局配置:/etc/profile。为所有登录的用户添加执行的命令。

    如果想添加全局配置,除了可以直接修改/etc/profile文件,还可以预设一个文件夹profile.d,在profile文件中设置一个for循环执行其中的所有.sh配置文件。这样可以降低修改文件带来的风险。

    Bash脚本的执行顺序

    父shell使用fork命令启动一个子shell
    子shell会继承父shell的环境变量,函数等信息
    子shell执行
    子shell结束,销毁相关环境
    父shell获取子shell的退出状态

    常用命令

    source:读取配置文件中的所有配置。
    eval:将上一次命令的执行结果再作为一次命令进行执行
    dirname $0: dirname表示获取路径名,$0参数表示当前脚本执行的路径,推荐使用该方法替换pwd获取当前脚本所在的路径名。

    Bash基础语法

    Bash命令的解析

    在bash命令正式执行之前,会先对输入的命令行进行解析,解析共可分为7部分,在解析过程中会严格按照以下顺序执行:
    花括号扩展(brace expansion):将花括号内的数字或字母逐个展开,如果有多个连续花括号则会对其中的内容进行排列组合,例如:{1… 10} {2, 4, 6} {a… f},如果不符合以上规范则不进行任何操作。
    波浪线扩展(tilde expansion):~会被扩展为当前用户的主目录,即 H O M E 值 , 例 如 : c d   变 量 扩 展 ( p a r a m e t e r v a r i a b l e e x p a n s i o n ) : 将 HOME值,例如:cd ~ 变量扩展(parameter variable expansion):将 HOMEcd parametervariableexpansion后的变量名替换为变量值,例如:echo $HOME
    算数扩展(arithmetic expansion):进行整数算数运算,例如:((i++)),((10 > 5)), ((11 * 12))
    命令替换(command substitution):将命令执行的结果赋值给一个变量,例如:today = $(date + %F), line = $(grep xxx yyy)
    词的拆分(Word splitting):将变量值按照空格符进行拆分
    路径名扩展(pathname expansion):将通配符扩展为文件名,通配符共有和?两种,其中代表任意长度的字符串,?代表长度为1的任意字符,[1-9]代表其中的任意一个字符, @与*的作用类似,但在@中,分割符将不会被替换。

    变量

    变量赋值:name=value
    变量引用: n a m e 注 意 事 项 : = 两 边 不 允 许 出 现 空 格 , name 注意事项:=两边不允许出现空格, name=name是 n a m e 的 简 写 命 令 替 换 : {name}的简写 命令替换: name(),将一条命令语句赋值给一个变量。

    常用变量

    $?: 上个命令的结束状态
    $!: 最后一个后天进程的pid
    $0: 脚本或函数的名字
    $n: 脚本或函数的第n个参数
    $#: 脚本或函数的参数个数
    $@: 脚本或函数的所有参数
    $$: 当前脚本的pid
    $UID: 当前用户的uid
    $LOGNAME: 用户名
    $HOSTNAME: 主机名
    $RANDOM: 生成1-32767之间的随机数
    $SECONDS: 当前脚本已经消耗的秒数
    $PWD: 当前工作路径

    环境变量

    $PATH: 命令搜索的路径名
    $LANG: locale,设置地区语言
    $LC_ALL: locale
    $TERM: 终端类型
    $EDITOR: 设置默认的编辑器类型
    环境变量的永久设置:export name=value
    单个脚本设置只需:name=value

    数值运算

    流程控制

    if
    case
    while
    until
    for var in list

    重定向

    一个进程运行时,内核会为其准备3个默认的文件描述符
    STDIN(0), STDOUT(1), STDERR(2)
    默认情况下,输出会被定向到屏幕,错误也会对定向到屏幕。可以通过重定向对应的文件描述符使输出与错误输出到文件上。

    echo xxx > file // 重写
    echo xxx 1> file // 与上一个相同
    echo xxx >> file // 续写
    read line < file // 输出重定向
    echo xxx 2> file // 错误输出重定向
    echo xxx > /dev/null 2>&1 // 标准输出与错误输出全部不记录
    echo xxx &> /dev/null // 与上一条相同
    echo xxx >> log 2>&1 // 输入输出全部定向到log文件

    块重定向

    可以在if,case,while,for语句之后接上重定向,代表内部所有语句均被重定向
    还可以使用()与{}包含多条语句,代表其中的语句均被重定向。
    其中()会新建一个sub shell其内部的所有变量外部均感知不到。

    函数

    函数需要先定义后使用。
    函数内部默认使用的都是全局变量,可以使用local声明局部变量。

    Bash监控程序的编写

    bash -n 检查语法
    bash -x 打印执行过程

    Bash编程模板

  • 相关阅读:
    构建高效的BFF(Backend for Frontend):优化前端与后端协作
    denied: requested access to the resource is denied报错解决
    QT 气泡消息绘制
    C++QT开发——TCP&UDP网络编程
    CISCO+交换机的常用命令
    vue3中的Props
    学习编程需要具备哪些条件
    【高级渲染特性】抗锯齿技术介绍
    实验3 字符串类型
    STM32-LTC6804方案成熟BMS方案
  • 原文地址:https://blog.csdn.net/qq_35630121/article/details/128151284