Linux基础Shell脚本全面学习总结

一、前言
本次小学期课程围绕基础Shell脚本展开系统学习,课程覆盖多条命令联合执行、脚本创建运行、echo输出、变量定义与命令替换、文件行数统计、整数/浮点数学运算、脚本退出状态码等核心知识点。本文结合Xshell实操过程梳理完整知识框架,记录每块内容的原理、使用场景与易错点,整理全部实操现象与踩坑经验。
二、多条命令组合执行方式
Shell支持一次性执行多条命令,分为分号分隔与管道符两种用法,二者输出逻辑存在明显区别。

  1. 分号;分隔命令:同一行写入多条指令,系统会从前到后依次完整执行每一条命令,每条命令都会独立输出自身运行结果,互不干扰。适合需要连续查看多条指令全部输出内容的场景。
  2. 管道符|传递输出:将前一条命令的输出结果,直接作为后一条命令的输入数据,最终仅展示最后一条命令的输出,中间命令不会打印内容。常用来做数据过滤、二次处理。
    三、Shell脚本创建、权限与运行方法
  3. 脚本文件规范:使用vim编辑器创建后缀为.sh的文本文件,文件首行必须填写#!/bin/bash,用于告知系统当前脚本使用bash解释器运行;#单独使用代表单行注释,仅作文字说明不会执行。
  4. 两种运行脚本方式
    第一种:直接调用bash命令执行脚本文件,该方式不需要给脚本添加可执行权限,操作简单,适合临时调试。
    第二种:通过文件相对路径./xxx.sh或绝对路径执行,该方式必须手动赋予文件可执行权限,否则会弹出Permission denied权限拒绝报错。赋予执行权限使用chmod u+x 文件名,修改权限后文件属性会新增x可执行标识。
  5. echo输出控制工具
    echo是脚本内自定义输出文本的核心命令,默认输出文字后自动换行;搭配-n参数可以取消末尾换行,让自定义文字和后续命令输出显示在同一行,优化输出排版可读性。
    四、Shell变量体系详解
    变量用于临时存储数据,分为系统环境变量、自定义局部变量、命令替换变量三类。
  6. 系统环境变量:Linux系统自带内置变量,如USER、UID、HOME,调用时在变量名前加符号;如果想要原样打印符号,需要在$前添加反斜线\进行转义。
  7. 用户自定义局部变量:命名支持字母、数字、下划线,长度不超过20字符,区分大小写;赋值格式为变量名=数值/字符串,等号左右两侧绝对不能存在空格。该变量仅在当前脚本运行期间生效,脚本执行结束后自动销毁,无法在外部终端直接调用。
  8. 命令替换赋值变量
    可以把命令执行结果存入变量,方便后续重复调用,有两种语法:反引号命令和 $(命令),后者可读性更高,推荐日常使用。典型场景为获取当前日期拼接生成自定义日志文件名,实现日志文件按日期区分。
  9. wc文件统计命令
    wc用于统计文本内容,默认输出文件行数、单词数量、字节总数;搭配-l参数仅单独输出文件行数;使用通配符*可以一次性统计当前目录下全部文件的行数信息。
    五、Shell数学运算(整数+浮点)
    原生bash仅支持整数运算,小数浮点运算需要借助bc计算器工具,三种运算方式各有优劣。
  10. expr命令运算:运算符和数字之间必须保留空格,*、括号等特殊符号需要添加反斜线转义,语法繁琐,使用较少。
  11. $[] 与 $(())内置运算:无需转义符号、不用严格空格,支持直接嵌入变量计算,专门处理整数运算,简洁高效,是脚本整数计算首选。
  12. bc浮点计算器
    交互模式:终端直接输入bc进入计算界面,默认仅输出整数结果;设置scale=数字可以指定保留小数位数;输入quit退出计算器,exit无法正常关闭。
    脚本内调用bc:借助管道符将计算公式传入bc,格式为变量=$(echo “精度设置;计算公式” | bc),注意精度scale语句必须写在运算表达式前方,调换顺序会导致小数设置失效。
    六、脚本退出与退出状态码
  13. 内置变量$?:专门存储上一条执行完毕命令的退出状态码,用来判断命令是否运行成功。
  14. 通用状态码含义:0代表命令正常执行无错误;1是未知通用错误;2代表命令格式错误;126文件无执行权限;127找不到输入的命令;130代表使用Ctrl+C强制终止程序;255为超出合法范围的异常退出码。
  15. exit自定义退出码:脚本末尾使用exit+数字,能够手动指定脚本结束时返回的状态码,默认情况下脚本会以最后一行命令的状态码退出。
    七、整体知识框架总结
  16. 脚本基础:.sh文件创建、#!/bin/bash声明、两种运行方式、文件执行权限管理、echo自定义输出;
  17. 命令组合:分号连续执行、管道符数据传递;
  18. 变量体系:系统环境变量、自定义局部变量、命令替换赋值、wc文件统计;
  19. 数值计算:expr老式整数运算、[]/(())简易整数运算、bc浮点小数运算;
  20. 程序退出:$?读取状态码、exit自定义退出码、各类标准退出码含义。