当前位置: 首页 > news >正文

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

前言

本次实训基于 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 文件名统计文件行数;命令参数与通配符*之间必须添加空格,否则报参数错误。

http://www.jsqmd.com/news/1160433/

相关文章:

  • 5分钟极速上手:通达信缠论可视化分析插件终极指南
  • 【计算机毕业设计】基于SpringBoot的“安馨乐”宠物医院管理系统的设计与实现
  • 2026年住人集装箱房全场景选型与落地服务白皮书 - 招财兔数字员工
  • 手把手教你从零搭建独立站:域名、主机、支付全流程详解
  • CHZZK:韩国Naver直播平台非官方API库的深度解析与应用
  • 在北京昌平出旧金,璟安回收真实称重实拍 - 新芸鼎珠宝首饰
  • 海口黄金回收,实时金价结算,不扣损耗当场打款 - 余生黄金回收
  • Ubuntu 18.04中文输入法全链路配置与排障指南
  • Cursor Pro免费激活终极指南:三招破解限制与五步实战教程
  • Claude Code系统提示词削减80%:AI编程助手的技术革新与实战指南
  • Copilot Excel数据分析提速8倍的秘密:基于真实金融/零售案例的12个可复用模板(限免24小时)
  • Claude Code忽略文件突然失效?紧急排查清单:从.gitignore继承冲突到CLI缓存污染的6分钟定位法
  • ChatGPT生成文案→Canva一键成图:3步搞定品牌海报/社媒封面/课程封面(附12个可复用提示词模板)
  • Dify实战指南:从零构建企业级AI应用,告别手搓轮子
  • 基于ADS131M02与PIC18LF4682的高精度ADC方案设计
  • 2026 年常州制药厂整厂打包回收 电子厂整厂打包回收 无尘车间拆除回收实测测评 - LYL仔仔
  • VSCode:学习手册 / 全景梳理与深度分析
  • N皇后问题扩展:回溯算法复杂度分析,从8皇后到15皇后的性能挑战
  • 大疆上云API 1.10.0 媒体上传优化:文件指纹去重与STS凭证获取源码解析
  • 计算机毕业设计之琴行销售管理系统
  • Unity游戏广告变现实战:MAX聚合AdMob集成与优化全解析
  • 实战总览:从 0 到 1 的时间线地图
  • NBM5100A与STM32F303VC的电池管理优化方案
  • STM32H723 ADC多路DMA配置:28通道CubeMX实战,含BDMA与Cache处理
  • CCS电池模组生产线:从工艺到数据闭环的架构实践
  • 用Python开发一个命令行工具:完整实战过程
  • STM32与TLP2770光耦实现高低压系统隔离设计
  • 深圳黄金回收正规攻略|透明高价、无坑安心变现 - 奢侈品回收测评
  • 蔡司三坐标复合式测量机携手宇瞳光学共建质量测量体系
  • 【官方公示】合肥腾飞学校 2026 正规报名渠道,官网与联系电话整理完毕 - Luckyone王