七、Linux Shell 与脚本基础

七、Linux Shell 与脚本基础

我们这次讲解Shell的核心概念,以及如何创建、配置和执行脚本,这是从手动命令到自动化运维的关键

作者:IvanCodes
日期:2025年8月7日
专栏:Linux教程

思维导图

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

一、Shell 简介

1. Shell 的定义与作用
Shell是命令行解释器,作为用户Linux内核交互的接口

它的工作流程:
1.接收用户输入的命令 (如 ls)
2.解释命令
3.调用内核执行
4.返回执行结果给用户

2. 常见的 Shell 类型

bash (Bourne Again SHell):Linux默认Shell,功能强大,兼容sh
sh (Bourne Shell):早期经典的Unix Shell,注重高兼容性
zsh (Z Shell):
功能比bash更强大,提供更丰富的自动补全和插件系统
ksh (Korn Shell):融合sh和csh的特性
csh/tcsh (C Shell):语法类似C语言

查看当前Shell:

echo$SHELL

3. Shell 与 Shell 脚本的区别

  • Shell (交互式):直接在终端输入命令并立即获得结果的环境。
ls -l pwd
  • Shell 脚本 (非交互式): 一个包含一系列命令文本文件,用于一次性执行以实现自动化
# script.sh 内容:# #!/bin/bash# echo "任务开始"# date# echo "任务结束"

二、编写第一个 Shell 脚本

1. 脚本文件的创建与命名

  1. 使用文本编辑器 (如 vim) 创建文件
  2. 在文件中编写命令
  3. 保存文件
    命名约定:强烈建议
    .sh后缀结尾 (如 backup.sh)

2. 指定解释器
定义:
脚本文件的第一行,格式为 #!解释器路径
作用:告诉操作系统在直接执行脚本时 (./script.sh)使用哪个解释器。
规则:必须是文件的绝对第一行

常见 Shebang 选项:

#!/bin/bash:
指定使用bash。优点: 可用bash扩展功能。缺点:可移植性稍差。

#!/bin/sh:
指定使用sh。优点:更好的可移植性(符合POSIX标准)。缺点:功能受限。

#!/usr/bin/env bash:
强烈推荐的方式。优点:env命令会在PATH环境变量中查找bash解释器,极大提高了脚本的可移植性

3. 脚本的执行方式
三种主要方式:

方式一: 作为解释器的参数执行
特点:无需执行权限。脚本在子Shell中执行,不影响当前Shell环境。

bash my_script.sh 

方式二: 赋予执行权限后直接运行
第一步:添加执行权限(x)

chmod +x my_script.sh 

第二步:直接执行

./my_script.sh 

特点:最标准的执行方式。Shebang决定解释器。脚本仍在子Shell中执行,不影响当前Shell环境。

方式三: 使用 source. 命令
特点:无需执行权限 (只需读权限)。脚本在当前Shell环境中执行,因此会影响当前环境 (如设置变量、定义函数)。

source my_script.sh # 或. my_script.sh 

执行方式对比小结:

执行方式需执行权限(x)?在子Shell中执行?影响当前Shell?主要用途
bash script.sh运行一次性任务
./script.sh标准执行
source script.sh(需r)加载配置/环境

三、注释与可读性

1. 单行注释
使用#符号。从 # 到行尾的内容被忽略

# 这是一个单行注释echo"Hello, World!"# 这也是注释

2. 多行注释的实现方式
使用Here Document重定向给空命令 :

:<<'COMMENT_BLOCK' 这是第一行注释。 这是第二行注释。 这整块内容都不会被执行。 COMMENT_BLOCK

3. 良好的注释习惯

  • 解释“为什么”(Why),而不是“干什么”(What)
  • 保持注释简洁并与代码同步
  • 文件头注释: 在脚本开头说明用途、作者、日期、版本等。
#!/usr/bin/env bash# ===================================================# Script Name: backup.sh# Description: Backs up the web server data.# Author: IvanCodes# Date: 2025-08-06# Version: 1.0# ===================================================

总结

本章我们奠定了Shell脚本的基础,理解了Shell的核心角色,掌握了脚本的创建、Shebang的重要性以及三种核心的执行方式。良好的注释习惯是编写专业脚本的第一步。


练习题

题目:

  1. 简述 Shell 在 Linux/Unix 系统中的主要作用是什么?
  2. Shell 脚本的第一行 #!/bin/bash 有什么作用?它通常被称为什么?
  3. 如何让一个名为 my_script.sh 的 Shell 脚本文件,能够直接通过 ./my_script.sh 的方式运行?请写出关键命令。
  4. 执行 Shell 脚本时,使用 bash script.shsource script.sh 的主要区别是什么?哪种方式会影响当前的 Shell 环境?
  5. 在 Shell 脚本中,如何添加单行注释?请给出表示注释的符号。
  6. Shell 没有原生的多行注释块语法。请描述一种常用的、基于 Here Document 的方法来模拟多行注释。
  7. 为什么通常推荐使用 #!/usr/bin/env bash 而不是直接使用 #!/bin/bash 作为 Shebang?
  8. 如果一个脚本文件 test.sh 没有执行权限,但有读权限,以下哪种方式可以成功执行它? A) ./test.sh B) bash test.sh C) source test.sh D) B和C均可
  9. 要查看当前系统默认的 Shell 是什么,应该执行什么命令?
  10. . (点号) 命令和 source 命令在执行脚本时有什么关系?
  11. 为什么在执行当前目录下的脚本时,通常需要在脚本名前加上 ./
  12. 你为一个脚本添加了 chmod +x script.sh 权限,但执行 ./script.sh 时提示 “bad interpreter: No such file or directory”。最可能的原因是什么?
  13. 写一个标准的文件头注释块,包含脚本名称、描述和作者。
  14. zshbash 都是 Shell 的一种实现,这种说法正确吗?
  15. 如果你有一个脚本 setup_env.sh,其内容是 export MY_VAR="hello"。为了在当前终端会话中设置 MY_VAR 这个环境变量,你应该使用哪种方式执行这个脚本?

答案与解析:

1. Shell 的作用:
解析:
Shell 是命令行解释器,作为用户与操作系统内核交互的接口或桥梁。它负责接收和解释用户的命令,调用内核执行,并返回结果。

2. Shebang 的作用:
解析:
#!/bin/bash 的作用是指定解释器。当脚本被直接执行时,操作系统会根据这一行找到 /bin/bash 解释器来处理脚本内容。这一行通常被称为Shebang。

3. 添加执行权限:

chmod +x my_script.sh 

解析:chmod +x 命令为文件添加执行权限,这是能够直接通过 ./ 方式运行脚本的先决条件。

4. bash vs source 的区别:
解析:
主要区别在于执行环境。bash script.sh 会启动一个新的子 Shell来执行脚本,不影响当前环境。source script.sh 则在当前的 Shell 环境中执行,会影响当前环境(如设置变量、定义函数)。

5. 单行注释符号:
解析:
在 Shell 脚本中,使用#符号来添加单行注释。

6. 模拟多行注释:
解析:
使用Here Document并将其重定向给一个空命令 :。例如:: <<'COMMENT' ... COMMENT

7. env 的优势:
解析:
#!/usr/bin/env bash提高了脚本的可移植性。它会在用户的PATH环境变量中查找bash,而不是硬编码为 /bin/bash。这使得脚本在不同系统或自定义环境下更容易成功运行。

8. 无执行权限的执行方式:
答案:
D) B和C均可
解析:bash test.shsource test.sh 都是直接调用解释器或内建命令来读取和执行脚本内容,因此只需要对文件有读权限即可,不需要执行权限。

9. 查看默认 Shell:

echo$SHELL

解析:$SHELL 是一个环境变量,它存储了当前用户登录时使用的默认 Shell的路径。

10. .source 的关系:
解析:
它们是等价的。. (点号) 是 source 命令的简写形式,两者都用于在当前 Shell 环境中执行脚本。

11. 使用 ./ 的原因:
解析:
出于安全原因。Linux 系统默认不会在当前工作目录下搜索命令。./明确地告诉Shell “请在当前目录下查找并执行这个文件”,防止意外运行了与系统命令同名的恶意脚本。

12. “bad interpreter” 错误原因:
解析:
这个错误最常见的原因是脚本的Shebang行 (#!...)指定了一个不存在或路径错误的解释器。另一个可能的原因是脚本文件从Windows系统拷贝过来,包含了回车符 (\r),导致解释器路径 (如 /bin/bash\r) 无效。

13. 标准文件头注释:

#!/usr/bin/env bash# ===================================================# Script Name: my_awesome_script.sh# Description: This script does awesome things.# Author: IvanCodes# ===================================================

解析: 一个好的文件头注释能让任何人快速理解脚本的基本信息,是专业脚本编写的标志。

14. zshbash 的关系:
答案:
正确。
解析: 两者都是不同的 Shell实现,都扮演着命令行解释器的角色,只是在功能、语法细节和用户体验上有所不同。

15. 设置环境变量的执行方式:
答案:
source setup_env.sh. setup_env.sh
解析:export 命令只有在当前 Shell 环境中执行时才能真正设置对当前会话生效的环境变量。如果使用 bash setup_env.shexport 会在子 Shell中执行,脚本一结束,子 Shell 销毁,设置的环境变量也就随之消失了。

Read more

VMware+Ubuntu+ROS完整部署流程

VMware+Ubuntu+ROS完整部署流程

本文是自己整理的完整的部署ROS的流程,欢迎大家沟通与交流,才疏学浅,有不对的地方欢迎大家与我交流。 注:本文章只适合Windows电脑用户 1.下载需要用到的资料 首先下载虚拟机软件VMware,win10系统选择下载1,win11系统选择下载2,以下是我自己的百度网盘链接: 下载1: 链接:https://pan.baidu.com/s/1d9lAB3OH2LkbmXXNXTmI3A? 提取码:pwd=6cdm 下载2: 链接:https://pan.baidu.com/s/1cgU_tzzkaOaPML0VMbisrA?pwd=m7vs 提取码: m7vs 然后根据你想学习的内容,选择你要下载的Ubuntu镜像,链接对应的镜像版本以及镜像可安装的ROS版本如下: 链接1:(Ubuntu18.04+ros1+melodic) 链接:https://pan.baidu.com/s/

By Ne0inhk

【OpenClaw 安装教程:Windows/macOS/Linux 全平台保姆级指南】

前言 OpenClaw(俗称"小龙虾")是一款开源的个人 AI 助手项目,由 PSPDFKit 创始人 Peter Steinberger 开发。与传统聊天 AI 不同,OpenClaw 不仅能回答问题,还能主动操作系统、访问网页、处理邮件、整理文件、发送消息等,真正实现"会动手干活的 AI"。 本文将详细介绍在 Windows、macOS 和 Linux 三大平台上安装 OpenClaw 的完整步骤,适合零基础用户快速上手。 一、安装前准备 1.1 系统要求 在开始安装之前,请确保你的电脑满足以下基本要求: 配置项最低要求推荐配置操作系统Windows 10/11、macOS

By Ne0inhk
Java项目CI/CD实战:Jenkins与GitLab CI深度解析

Java项目CI/CD实战:Jenkins与GitLab CI深度解析

基于多年Java实战,我将用8000字带你穿透概念,直击本质。不聊虚的,只讲真正影响你交付效率的核心决策、避坑经验和选型逻辑。从架构差异到性能表现,从企业落地到未来趋势,一文搞定CI/CD选型。 目录 开篇:CI/CD的务实之选 核心差异:设计哲学决定使用体验 Jenkins:插件驱动的“乐高大师” GitLab CI:一体化的“精装修” 性能对决:数字不说谎 构建性能对比 资源消耗分析 核心原理:技术实现的本质差异 Jenkins Pipeline:Groovy的力量与代价 GitLab CI:YAML的简洁与限制 企业实战:从选型到落地 选型决策框架 实施路线图 混合架构实践 性能优化:从分钟到秒级 Jenkins优化实战 GitLab CI优化技巧 企业级安全与合规 安全防护体系 访问控制策略 监控与故障排查 构建监控体系

By Ne0inhk
玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)

玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)

本文介绍如何安装 AI 编码界一骑绝尘的最强工具 ——— Claude Code。安装不同的操作系统环境,本文会从 Windows、Linux、Mac 三个不同的系统环境依次介绍安装方法。 其中,Windows 系统作为大家最主流的操作系统,提供了两种安装方式,一种方式是直接在 Windows 的终端里安装,另一种是在 Windows 的子系统(WSL)内完成安装。其中,通过 WSL 安装,我们又可以分为,WSL 环境的直装和基于 WSL 的容器化安装(Docker),几种方法各有利弊,但均可正常使用。 Windows 环境直装 Claude Code 1. 获取 Claude Code 账号 访问 Claude Code 中国镜像站,完成账户注册。 输入邀请码

By Ne0inhk