Linux Shell 脚本零基础实操笔记
一、前言
本文整合Shell脚本入门全部核心知识点,全程基于Xshell连接Linux虚拟机实操,完整记录概念、命令、参数、运行结果与报错解决方案,搭建完整的Shell学习知识体系,所有代码均可直接复制复现。
二、整体知识框架总述
本次学习一共七大核心内容:Shell脚本文件概念、vim脚本编辑操作、chmod文件权限控制、脚本三种运行方式、Shell变量使用、wc文件统计命令、数学运算实现方案、命令退出状态码$?。下文每个模块会分别讲解概念、命令用途、核心参数、实操代码与运行效果。
三、分模块知识点与Xshell实操演示
模块1:Shell脚本基础与vim编辑器操作
- 概念理解
后缀为.sh的文件称为Shell脚本,作用是批量存放多条Linux命令,Shell会从上到下按顺序自动执行文件内所有指令。脚本第一行必须固定填写#!/bin/bash,用来指定解析脚本的解释器。 - 核心命令与操作说明
创建、打开、编辑脚本使用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 修改脚本执行权限
- 概念理解
Linux系统中新创建的文件默认不具备执行权限,直接用./脚本名的方式运行会报错,需要通过chmod命令给文件添加执行权限。 - 命令用途与核心参数
命令基础格式:chmod 参数 目标文件名
核心参数说明:+x:给文件增加可执行权限,本次实操核心参数;-x:移除文件已有的执行权限。
实操权限修改命令:
chmod+x test.sh命令执行后无任何输出,代表权限修改成功;如果提示No such file or directory,代表当前目录不存在对应脚本文件,需要先用vim创建文件。
模块3:三种运行Shell脚本的方式
- 概念理解
脚本添加执行权限后有推荐运行方式,同时存在两种无需执行权限即可运行的兼容方式。 - 实操命令与区别说明
①./test.sh:推荐运行方式,必须提前执行chmod +x添加执行权限,代表执行当前目录下的test.sh文件;
②bash test.sh:不需要提前赋予执行权限,直接调用bash解释器读取并运行脚本;
③sh test.sh:兼容老旧shell解释器,同样不需要文件具备执行权限。 - 脚本运行输出示例
执行./test.sh后,终端打印内容如下:
当前用户:sui 加法结果:15 7 ./test.sh最后一行数字代表脚本文件的总行数。
模块4:Shell变量使用规则
- 概念理解
统一使用符号$引用变量,变量分为两类:系统内置环境变量、脚本自定义局部变量。 - 实操使用说明
① 环境变量:系统提前预设,直接使用$变量名读取,例如$USER代表当前登录用户名,$HOME代表用户家目录;
② 自定义变量:赋值格式为变量名=值,等号左右两侧绝对不能添加空格,读取时同样使用$变量名;
变量实操示例代码:
name="sui"num=10echo$nameecho$num模块5:wc 文件统计命令
- 概念理解
wc全称word count,专门用于统计文件内容信息,本次学习核心用途为统计文件行数。 - 核心参数用法
-l:统计文件总行数,本章节重点参数;-w:统计文件内单词总数量;-c:统计文件全部字符总数。
基础统计实操命令:
wc-ltest.sh默认输出格式为「行数 文件名」,如果只想获取纯数字行数,搭配管道过滤输出:
wc-ltest.sh|awk'{print $1}'模块6:Shell数学运算四种实现方案
- 概念区分
expr、$[]、$(( ))三种写法仅支持整数运算,除法会直接舍弃小数部分;bc工具支持高精度小数运算,可通过scale关键字自定义保留小数位数。本次课堂练习题使用$(( ))完成整数嵌套计算,bc实现小数除法。 - 课堂练习题完整实操代码
需要计算两组式子: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"- 运算输出结果
100*(50-45) = 500 100/52 = 1.9230模块7:命令退出状态码 $?
- 概念理解
终端中每一条命令执行完毕后,系统都会生成对应的退出状态码,通过$?可以读取上一条命令的执行结果:数字0代表命令执行成功,非0数字代表执行出错,不同数字对应不同错误类型。 - 实操演示代码
# 执行正确命令lsecho$?# 输出0,代表命令执行成功# 执行不存在的错误命令abcdecho$?# 输出非0数字,代表命令执行失败四、实操高频报错解决方案
- chmod: cannot access ‘test.sh’: No such file or directory
报错原因:当前目录未创建test.sh脚本文件;解决方法:执行vim test.sh创建文件后,再修改权限。 - -bash: ./test.sh: 没有那个文件或目录
报错原因:缺少目标脚本文件,或文件名大小写输入错误(Linux系统区分文件名大小写);解决方法:执行ls查看当前目录存在的文件,核对文件名。 - vim编辑器内无法输入:wq退出
报错原因:仍处于插入编辑模式,未切换到命令模式;解决方法:按下一次Esc退出编辑模式,再输入英文冒号加保存退出指令;如果编辑器卡死,使用快捷键Ctrl+Z挂起vim,输入kill %强制关闭vim进程。
五、学习总结
- Shell脚本后缀统一为.sh,使用vim编写,脚本首行必须声明
#!/bin/bash指定解释器; - 所有变量统一使用$符号读取,自定义变量赋值时等号两侧禁止添加空格;
- wc -l是统计文件行数专用命令,$(( ))适合快速书写整数运算,bc工具用于处理带小数的计算;
- chmod +x可以给脚本添加执行权限,脚本一共有三种运行方式;
- $?可以查看上一条命令执行状态,返回0代表成功,非0代表执行失败;
- 全部操作均在Xshell中完成,操作命令前建议用ls确认文件是否存在,规避文件不存在类报错。
