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

Shell 脚本基础笔记

一 shell脚本概述

Shell 脚本是一种用 Shell 命令编写的脚本程序,用于在 Unix/Linux 系统的命令行环境中自动化执行任务。
它由一系列命令、逻辑控制语句(如条件判断、循环)和函数组成,保存为文本文件(通常以 .sh 为扩展名),由 Shell 解释器(如 Bash、Zsh)逐行解析执行。 

通过/etc/shells可查看系统支持的 Shell 类型,常见包括:

sh(Bourne Shell):Unix 系统中 root 默认 Shell,简洁轻量。

bash(Bourne Again Shell):Linux 默认 Shell,功能强大,兼容 sh。

csh:语法类似 C 语言,用于 BSD 系统。

ksh:兼容 sh 并吸收 csh 特性,适合复杂脚本。

Shell 脚本的核心特点

  1. 基于命令行:直接调用系统命令(如 lsgrepawk),无需编译。

  2. 轻量级:适合快速开发小型自动化任务。

  3. 跨平台性:在支持相同 Shell 的系统(如 Linux、macOS)中通用。

脚本格式

脚本文件通常以 #!/bin/bash 开头,这被称为 Shebang,作用是指定该脚本使用 bash 解析器来执行。例如:

#!/bin/bash
# 这是一个简单的 Shell 脚本
echo "Hello World!"  # 输出文本
mkdir backup         # 创建目录
cp *.txt backup/     # 复制所有 txt 文件到 backup 目录

二 Shell脚本中的基本元素

基本结构

1.脚本幻数(Shebang)

脚本第一行的 #!/bin/bash (常见 ),指定脚本使用的 Shell 解析器,告诉系统用什么程序来解释执行脚本内容。

#!/bin/bash

2.命令

可执行的语句,是实现脚本功能的核心。比如 echo 用于输出文本,ls 用于列出目录内容 ,cd 用于切换目录等。

3.注释

单行注释:以 # 开头,用于对某一行代码或脚本某部分功能进行说明,提高脚本可读性,如 # 这是一个输出问候语的脚本 。

多行注释:可利用 :<<'END' 和 END 实现,END 可自定义,如 :<<'COMMENT' 与 COMMENT 配对 。

 4.变量

系统变量:如 $HOME(用户主目录 )、$PWD(当前工作目录 )等,由系统定义和维护。

自定义变量:用户自己定义的变量,如 name=Alice ,注意等号两边不能有空格。

特殊变量$0(脚本名 )、$1 - $9(脚本参数 )、$#(参数个数 )、$?(上一命令退出状态 )等。

5.运算符

数值运算:如 +(加 )、-(减 )、*(乘 )、/(除 )、%(取余 ) ,可通过 ((运算式)) 或 expr 命令进行运算。

条件判断:如 -eq(等于 )、-ne(不等于 )、-gt(大于 )等 ,配合 [ 条件判断式 ] 进行条件判断。

6.流程控制语句

条件判断if - then - elif - else - fi 结构,根据条件执行不同代码块。

循环语句for 循环用于遍历列表或指定范围;while 循环在条件为真时重复执行代码块;until 循环在条件为假时重复执行代码块。

其他case - esac 用于多条件分支判断;break 用于跳出循环;continue 用于跳过本次循环的剩余部分,继续下一次循环。

7.函数

可将重复使用的代码块封装成函数,提高代码复用性,定义格式如 函数名() { 程序 } ,调用时直接写函数名。

8.脚本调试与退出值

调试方法

使用sh -x 脚本名显示脚本执行过程,+开头的行表示正在执行的命令,便于定位错误。

 退出值

定义:命令执行后的状态码(0~255),0 表示成功,非 0 为失败。

查看:执行命令后,用echo $?查看退出值。

修改:在脚本中用exit 数值指定退出值,如exit 66

示例:

#!/bin/bash  
# 作者:czg  
# 日期:2025/05/29  
# 功能:输出系统信息  echo "当前用户:$czg"  
echo "当前路径:$PWD"  
date  
exit 0  # 正常退出  

三 shell脚本的作用

Shell 脚本的主要作用是提升效率和实现自动化,尤其在系统管理、运维、数据处理等领域中不可或缺。

核心作用:


1.自动化重复操作

例:批量重命名文件、定期清理日志、自动备份数据。

替代手动逐条输入命令,减少人为错误。

2.简化复杂任务

例:一键部署服务、集成多步骤流程(如下载数据 → 处理 → 上传结果)。 

通过逻辑控制(如 if、for)组合多个命令。

3.系统管理与监控

例:检查磁盘空间、监控进程状态、发送报警邮件。

直接调用系统工具(如 df、ps、cron)。

4.快速原型开发

例:临时测试某个功能或流程。

无需编译,修改后立即运行。

四 脚本执行方法

  1. 当前环境执行(不创建子进程)

    • 命令:./脚本名(需赋予执行权限,chmod +x 脚本名)或source 脚本名/./脚本名(无需权限)。
    • 特点:在当前 Shell 进程中运行,影响当前环境变量。
  2. 指定环境执行(创建子进程)

    • 命令:sh 脚本名bash 脚本名,脚本无需执行权限。
    • 特点:在子进程中运行,不影响当前环境。
vim lee.sh
#!/bin/bash 
cat
.lee.sh #当前
source lee.sh #当前
sh lee.sh #指定

五 Shell 脚本的典型应用场景:

  1. 日常运维:自动化日志切割、清理过期文件、服务状态监控。

  2. 部署与发布:一键编译代码、打包应用、更新服务器。

  3. 数据处理:批量转换文件格式、提取文本内容、生成统计报表。

  4. 开发辅助:运行测试用例、生成文档、环境配置。

http://www.xdnf.cn/news/720397.html

相关文章:

  • Java 中的 synchronized 和 Lock:如何保证线程安全
  • 深度解析互联网区(Internet ):架构、风险与防护全攻略
  • iOS 关于上架 4.3a
  • 330130-045-00-00 Bently Nevada 3300 XL延长电缆
  • 软考 系统架构设计师之考试感悟3
  • 美创专家分享医疗数据安全分类分级实践与探索
  • 从“固定“到“流动“:移动充电如何重塑用户体验?
  • 使用grpc建立跨语言通讯
  • Lua语言学习
  • 编译原理OJ平台练习题题解
  • 用 Python 模拟下雨效果
  • 输入输出相关问题 day4
  • CSS--background-repeat详解
  • 数据中台是什么?数据中台解决方案怎么做?
  • Java基于SpringBoot的医院挂号系统,附源码+文档说明
  • Animate CC CreateJS 技术50道测试题目
  • python面向对象
  • NodeJS 基于 Koa, 开发一个读取文件,并返回给客户端文件下载,以及读取文件形成列表和文件删除的代码演示
  • 64、【OS】【Nuttx】任务休眠与唤醒:clock_nanosleep
  • Java类中各部分内容的加载执行顺序
  • 【JS进阶】JavaScript 中 this 值的确定规则
  • 软考-系统架构设计师-第六章 系统工程基础知识
  • 软考-系统架构设计师-第二章 嵌入式基础知识
  • 《Map 到底适合用哪个?HashMap、TreeMap、LinkedHashMap 对比实战》
  • 位图--Bitset【0基础详细版】
  • AI和大数据:是工具,还是操控人心的“隐形之手”?
  • Vue模板语法
  • 【大模型学习网络互联】Memory-Mapped I/O MMIO语义与MEM语义
  • 【Elasticsearch】exists` 查询用于判断文档中是否存在某个指定字段。它检查字段是否存在于文档中,并且字段的值不为 `null`
  • 【数据库】数据库的完整性