Linux Shell 脚本零基础实操笔记

Linux Shell 脚本零基础实操笔记

一、前言

本文整合Shell脚本入门全部核心知识点,全程基于Xshell连接Linux虚拟机实操,完整记录概念、命令、参数、运行结果与报错解决方案,搭建完整的Shell学习知识体系,所有代码均可直接复制复现。

二、整体知识框架总述

本次学习一共七大核心内容:Shell脚本文件概念、vim脚本编辑操作、chmod文件权限控制、脚本三种运行方式、Shell变量使用、wc文件统计命令、数学运算实现方案、命令退出状态码$?。下文每个模块会分别讲解概念、命令用途、核心参数、实操代码与运行效果。

三、分模块知识点与Xshell实操演示

模块1:Shell脚本基础与vim编辑器操作

  1. 概念理解
    后缀为.sh的文件称为Shell脚本,作用是批量存放多条Linux命令,Shell会从上到下按顺序自动执行文件内所有指令。脚本第一行必须固定填写#!/bin/bash,用来指定解析脚本的解释器。
  2. 核心命令与操作说明
    创建、打开、编辑脚本使用vim工具,基础创建命令:
vimtest.sh

执行这条命令时,如果当前目录不存在test.sh,会自动新建空白脚本文件;如果文件已存在,则直接打开原有文件。
vim分为两种工作模式,完整操作流程:
① 打开文件后按下键盘i,进入插入编辑模式,此时可以自由输入脚本代码;
② 代码编写完成后按下Esc键,退出编辑模式,切换为命令模式;
③ 输入英文半角冒号:,再追加对应指令实现保存、退出:
:wq:保存本次所有修改,退出vim返回终端;
:q:文件无修改时,直接退出编辑器;
:q!:强制退出,丢弃本次所有编辑内容,不保存修改。
3. 实操完整测试脚本
在vim编辑模式下输入以下代码,作为基础测试脚本:

#!/bin/bash# 读取系统环境变量echo"当前用户:$USER"# 自定义局部数字变量a=10b=5# 双圆括号整数数学运算echo"加法结果:$((a+b))"# $0代表当前脚本文件本身,统计脚本总行数wc-l$0

模块2:chmod 修改脚本执行权限

  1. 概念理解
    Linux系统中新创建的文件默认不具备执行权限,直接用./脚本名的方式运行会报错,需要通过chmod命令给文件添加执行权限。
  2. 命令用途与核心参数
    命令基础格式:chmod 参数 目标文件名
    核心参数说明:
    +x:给文件增加可执行权限,本次实操核心参数;
    -x:移除文件已有的执行权限。
    实操权限修改命令:
chmod+x test.sh

命令执行后无任何输出,代表权限修改成功;如果提示No such file or directory,代表当前目录不存在对应脚本文件,需要先用vim创建文件。

模块3:三种运行Shell脚本的方式

  1. 概念理解
    脚本添加执行权限后有推荐运行方式,同时存在两种无需执行权限即可运行的兼容方式。
  2. 实操命令与区别说明
    ./test.sh:推荐运行方式,必须提前执行chmod +x添加执行权限,代表执行当前目录下的test.sh文件;
    bash test.sh:不需要提前赋予执行权限,直接调用bash解释器读取并运行脚本;
    sh test.sh:兼容老旧shell解释器,同样不需要文件具备执行权限。
  3. 脚本运行输出示例
    执行./test.sh后,终端打印内容如下:
当前用户:sui 加法结果:15 7 ./test.sh

最后一行数字代表脚本文件的总行数。

模块4:Shell变量使用规则

  1. 概念理解
    统一使用符号$引用变量,变量分为两类:系统内置环境变量、脚本自定义局部变量。
  2. 实操使用说明
    ① 环境变量:系统提前预设,直接使用$变量名读取,例如$USER代表当前登录用户名,$HOME代表用户家目录;
    ② 自定义变量:赋值格式为变量名=值等号左右两侧绝对不能添加空格,读取时同样使用$变量名
    变量实操示例代码:
name="sui"num=10echo$nameecho$num

模块5:wc 文件统计命令

  1. 概念理解
    wc全称word count,专门用于统计文件内容信息,本次学习核心用途为统计文件行数。
  2. 核心参数用法
    -l:统计文件总行数,本章节重点参数;
    -w:统计文件内单词总数量;
    -c:统计文件全部字符总数。
    基础统计实操命令:
wc-ltest.sh

默认输出格式为「行数 文件名」,如果只想获取纯数字行数,搭配管道过滤输出:

wc-ltest.sh|awk'{print $1}'

模块6:Shell数学运算四种实现方案

  1. 概念区分
    expr$[]$(( ))三种写法仅支持整数运算,除法会直接舍弃小数部分;bc工具支持高精度小数运算,可通过scale关键字自定义保留小数位数。本次课堂练习题使用$(( ))完成整数嵌套计算,bc实现小数除法。
  2. 课堂练习题完整实操代码
    需要计算两组式子:100*(50-45)、100/52
# $(( )) 整数嵌套运算res1=$((100*(50-45)))echo"100*(50-45) =$res1"# bc小数运算,设置保留4位小数res2=$(echo"scale=4; 100/52"|bc)echo"100/52 =$res2"
  1. 运算输出结果
100*(50-45) = 500 100/52 = 1.9230

模块7:命令退出状态码 $?

  1. 概念理解
    终端中每一条命令执行完毕后,系统都会生成对应的退出状态码,通过$?可以读取上一条命令的执行结果:数字0代表命令执行成功,非0数字代表执行出错,不同数字对应不同错误类型。
  2. 实操演示代码
# 执行正确命令lsecho$?# 输出0,代表命令执行成功# 执行不存在的错误命令abcdecho$?# 输出非0数字,代表命令执行失败

四、实操高频报错解决方案

  1. chmod: cannot access ‘test.sh’: No such file or directory
    报错原因:当前目录未创建test.sh脚本文件;解决方法:执行vim test.sh创建文件后,再修改权限。
  2. -bash: ./test.sh: 没有那个文件或目录
    报错原因:缺少目标脚本文件,或文件名大小写输入错误(Linux系统区分文件名大小写);解决方法:执行ls查看当前目录存在的文件,核对文件名。
  3. vim编辑器内无法输入:wq退出
    报错原因:仍处于插入编辑模式,未切换到命令模式;解决方法:按下一次Esc退出编辑模式,再输入英文冒号加保存退出指令;如果编辑器卡死,使用快捷键Ctrl+Z挂起vim,输入kill %强制关闭vim进程。

五、学习总结

  1. Shell脚本后缀统一为.sh,使用vim编写,脚本首行必须声明#!/bin/bash指定解释器;
  2. 所有变量统一使用$符号读取,自定义变量赋值时等号两侧禁止添加空格;
  3. wc -l是统计文件行数专用命令,$(( ))适合快速书写整数运算,bc工具用于处理带小数的计算;
  4. chmod +x可以给脚本添加执行权限,脚本一共有三种运行方式;
  5. $?可以查看上一条命令执行状态,返回0代表成功,非0代表执行失败;
  6. 全部操作均在Xshell中完成,操作命令前建议用ls确认文件是否存在,规避文件不存在类报错。