尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【无标题】【CSDN 完整原创文章:Linux Shell 脚本全流程实战】

【无标题】【CSDN 完整原创文章:Linux Shell 脚本全流程实战】
📅 发布时间:2026/7/10 11:17:09

前言

本次实训基于 Xshell 远程连接 VMware Ubuntu 虚拟机,收录本次所有截图对应的全部命令、完整脚本、运行输出、报错信息、原理解析,覆盖脚本创建、权限管理、脚本执行、echo 输出、变量使用、日志生成、整数 / 浮点运算、退出状态码全知识点,无内容遗漏,可直接作为 Linux 课程实训报告配套技术文章。

一、基础前置核心知识点

1. Shell 脚本基础规范

  1. 脚本后缀统一为.sh,文件首行必须写释伴行#!/bin/bash,指定 bash 解释器;
  2. 创建脚本工具:vim 脚本名.sh;
  3. 两种脚本执行模式:
    • 模式 1:bash 脚本名.sh,无需文件执行权限,直接调用 bash 解释器读取运行;
    • 模式 2:./脚本名.sh,文件必须拥有x可执行权限,否则抛出Permission denied;
  4. 权限操作命令:
    • chmod u+x 脚本名.sh:给文件所有者添加执行权限;
    • ls -l 脚本名.sh:查看文件权限,权限位x代表可执行标记;
  5. bash 执行语法参考:bash --help,标准格式bash [参数] script-file ...。

2. echo 输出命令用法

  1. echo "内容$变量":双引号自动解析$变量,输出变量真实值;
  2. echo -n "内容":-n参数取消输出末尾自动换行;
  3. echo "\$变量":反斜杠\转义$,原样输出$变量字符串,不解析变量。

3. Shell 变量分类与规则

(1)系统内置环境变量(无需定义,直接调用)

  • $USER:当前登录用户名
  • $UID:用户数字 ID
  • $HOME:用户家目录绝对路径

(2)自定义变量

赋值格式:变量名=值,等号两侧禁止空格;调用格式$变量名;多个变量连续书写自动拼接内容。

(3)转义符\

\$屏蔽变量解析,原样打印$符号。

二、实操案例 1:查看 bash 执行语法(bash --help 截图)

1. 执行命令

bash --help

2. 截图关键输出

plaintext

GNU bash, version 5.2.21(1)-release-(x86_64-pc-linux-gnu) Usage: bash [GNU long option] [option] bash [GNU long option] [option] script-file ...

3. 知识点解读

bash script-file是无权限运行脚本的标准语法,对应实操中bash test.sh执行方式。

三、实操案例 2:基础日期日志脚本 test.sh(创建、bash 无权限运行)

1. 创建脚本文件命令

vim test.sh

2. test.sh 完整源码

#!/bin/bash #This script displays the date and who's logged on echo -n "The time and date are:" date echo "Let's see who's logged into the system:" who

3. 无权限执行方式:bash test.sh

执行命令

bash test.sh

运行输出结果

plaintext

The time and date are:Thu Jul 9 10:39:27 AM CST 2026 Let's see who's logged into the system: jiayang7 pts/0 2026-07-09 10:12 (192.168.237.1) jiayang7 seat0 2026-07-09 10:13 (login screen) jiayang7 tty2 2026-07-09 10:13 (tty2)

4. 原理说明

直接调用 bash 程序读取脚本,不依赖文件自身执行权限,适合脚本调试。

四、实操案例 3:./test.sh 权限报错 + chmod 赋执行权限完整流程

步骤 1:直接./test.sh执行,权限不足报错

执行命令

./test.sh

报错信息

plaintext

-bash: ./test.sh: Permission denied

查看原始文件权限

ls -l test.sh

输出:-rw-rw-r-- 1 jiayang7 jiayang7 72 Jul 9 10:38 test.sh权限位无x,缺少执行权限。

步骤 2:赋予所有者可执行权限

chmod u+x ./test.sh

步骤 3:验证权限修改结果

ls -l test.sh

输出:-rwxrw-r-- 1 jiayang7 jiayang7 72 Jul 9 10:38 test.sh权限位出现x标记,代表可执行权限生效。

步骤 4:权限生效后 ./test.sh 正常运行

执行命令

./test.sh

运行输出

plaintext

The time and date are:Thu Jul 9 10:44:32 AM CST 2026 Let's see who's logged into the system: jiayang7 pts/0 2026-07-09 10:12 (192.168.237.1) jiayang7 seat0 2026-07-09 10:13 (login screen) jiayang7 tty2 2026-07-09 10:13 (tty2)

五、实操案例 4:系统内置环境变量 \(USER/\)UID/$HOME 演示

1. 变量脚本源码

#!/bin/bash #This script displays variable echo "User info for userid: $USER" echo UID:$UID echo HOME:$HOME echo HOME:\$HOME

2. 执行命令

./test.sh

3. 输出结果

plaintext

User info for userid: jiayang7 UID:1000 HOME:/home/jiayang7 HOME:$HOME

4. 核心知识点

  1. $USER/$UID/$HOME系统自带环境变量,自动读取当前用户信息;
  2. $HOME直接解析输出家目录路径;\$HOME转义后原样打印$HOME字符串。

六、实操案例 5:自定义变量、变量拼接演示

1. 自定义变量脚本源码

#!/bin/bash #Users define variables name1="jiayang" name2="ywq" day1=1 day2=2 echo "$name1 checked in $day1 day ago" echo "$name2 checked in $day2 days ago" echo "$name1 checked in $day1$day2 days ago"

2. 运行输出

plaintext

jiayang checked in 1 day ago ywq checked in 2 days ago jiayang checked in 12 days ago

3. 知识点

自定义变量赋值变量=值,等号无空格;连续书写$day1$day2自动拼接为12。

4.获得当前日期并用它生成唯一文件名

七、实操案例 6:exit 自定义退出状态码

1. exit_test.sh 完整脚本

#!/bin/bash var=5 echo "The answer is $var" exit $var

2. 执行命令

vim exit_test.sh bash exit_test.sh # 查看脚本退出状态码 echo $?

3. 运行输出

plaintext

The answer is 5 # echo $? 输出:5

4. 原理

exit 数字自定义脚本退出码,执行echo $?读取上一条程序返回状态,用于流程判断。

八、实操案例 7:wc 文件行数统计工具

全部执行命令

# 完整统计:行数、单词数、字符数 wc test.sh # 仅统计文件行数 wc -l test.sh # 错误写法:参数与通配符无空格,报无效参数 wc -l* # 正确写法,空格分隔 wc -l *

报错解析

wc: invalid option -- '*',-l*连写导致*被识别为命令参数,必须空格分隔wc -l *。

九、实操案例 8:四种 Shell 数学运算完整实操

9.1 expr 整数运算(运算符必须空格,* 需转义 *)

# 错误:无空格 expr 1+5 # 正确:运算符两侧空格 expr 1 + 5 # 错误:*未转义,识别为文件通配符 expr 5 * 2 # 正确:乘号转义 expr 5 \* 2

9.2 $[] / $(()) 整数复合运算脚本 operation_test.sh

#!/bin/bash #This script shows basic mathematical operations result1=$[100*(50-45)] echo "The result of the square bracket operation is : $result1" result2=$((100*(50-45))) echo "The result of double bracket operation is : $result2" result3=$[100/52] echo "The result of the second test is : $result3"

执行 & 输出

bash operation_test.sh The result of the square bracket operation is : 500 The result of double bracket operation is : 500 The result of the second test is : 1

说明

$[]与$(())功能完全一致,仅支持整数,除法自动向下取整。

9.3 bc 浮点小数运算(scale 控制保留小数位数)

交互式 bc 命令

bc # 默认整数除法 100/52 # 设置保留4位小数 scale=4 100/52 exit

输出:

plaintext

1 scale=4 1.9230

脚本管道调用 bc(bc_test.sh)

#!/bin/bash #This script shows bc operations var1=$(echo "scale=5; 3.44/5" | bc) echo "This answer is $var1" # 先运算后设置scale,不生效 var2=$(echo "3.44/5; scale=5" | bc) echo "This exchange answer is $var2" # 自定义变量代入浮点运算 num=77 var3=$(echo "scale=3;$num/$var1" | bc) echo "This answer is $var3"

关键规则

scale=N必须写在除法运算前,小数位数才会生效。

十、全文实训综合总结(作业答题专用)

1. 创建 & 运行 sh 脚本完整流程

  1. 创建脚本:vim xxx.sh,首行添加#!/bin/bash解释器声明;
  2. 无权限调试运行:bash xxx.sh;
  3. 标准执行完整流程:① 赋予执行权限:chmod u+x xxx.sh② 执行脚本:./xxx.sh③ 权限校验:ls -l xxx.sh,确认权限位存在x标记
  4. 权限报错Permission denied解决:执行chmod u+x 脚本名.sh添加执行权限。

2. echo 输出三大用法

  1. echo "文本$变量":解析变量输出真实值;
  2. echo -n "文本":输出不自动换行;
  3. echo "\$变量":反斜杠转义,原样打印$符号。

3. $ 变量使用规则

  1. 系统内置变量:$USER、$UID、$HOME,直接调用;
  2. 自定义变量:变量名=值(等号两侧无空格),调用$变量名;
  3. 多变量连续书写自动拼接内容;
  4. \$屏蔽变量解析,打印原始$字符串。

4. 四种数学运算对比表

表格

运算方式是否支持小数使用限制
expr仅整数运算符前后必须空格,*需转义\*
$[]仅整数无需转义,支持括号复合运算
$(())仅整数语法、功能和 $[] 完全一致
bc支持浮点小数scale=N控制小数位数,可管道嵌入脚本

5. exit 退出状态码

exit 自定义数字设置脚本返回值,执行echo $?读取上一条程序退出状态,用于程序逻辑判断。

6. wc 文件统计工具

wc -l 文件名统计文件行数;命令参数与通配符*之间必须添加空格,否则报参数错误。

相关新闻

  • Perplexity Pro到底值不值得买:3个月高强度对比测试后,我删掉了所有替代工具
  • 【计算机毕业设计】基于SpringBoot的“安馨乐”宠物医院管理系统的设计与实现
  • 海口黄金回收,实时金价结算,不扣损耗当场打款 - 余生黄金回收

最新新闻

  • 推荐十方上品美术,学生就业情况好不好? - mypinpai
  • 工业信号采集中的隔离设计与抗干扰技术
  • STL转STEP格式转换终极指南:如何5分钟实现3D模型无缝升级
  • STM32F103C8T6 + ESP8266 智能药盒:CubeMX 配置 Wi-Fi 通信 5 步实现
  • 【小程序毕设】基于SpringBoot3+Vue3+微信小程序的校园自习室智能座位预约系统
  • 终极指南:如何快速下载GitHub单个文件或文件夹

日新闻

  • OpenClaw本地化部署:xParse文档解析引擎实战指南
  • 蓝牙 5.4 协议栈深度解析:从 HCI 到 L2CAP 的 7 层数据流
  • PyTorch nn.CrossEntropyLoss 实战:3种权重设置与标签平滑对比(附代码)

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号