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

【Linux基础知识系列】第九篇-Shell脚本入门

在Linux世界中,Shell脚本是自动化任务和简化操作的重要工具。它可以帮助用户编写一系列命令,自动执行重复的任务,从而提高工作效率。在本篇文章中,我们将介绍Shell脚本的基本概念、编写方法、常用命令和结构。通过这些内容,读者将能够创建简单的自动化脚本来管理日常任务。

一、什么是Shell脚本?

1. Shell的概念

Shell是一个用户与操作系统之间的接口,负责接收用户输入的命令并将其传递给操作系统去执行。Linux常用的Shell有多个版本,如:

Bash(Bourne Again SHell):最常用的Shell,支持命令补全和脚本功

sh(Bourne Shell):经典的Shell,功能比较基础。

zsh(Z Shell):功能更强大,提供更多的自动补全支持。

fish(Friendly Interactive SHell):用户友好型的Shell,易于使用。

2. Shell脚本的定义

Shell脚本是一个包含一系列Shell命令的文本文件,这些命令按顺序执行。通过Shell脚本,用户可以:

自动化日常任务。

批量处理文件。

进行系统监控。

编写安装脚本和配置脚本等。

二、编写Shell脚本的基础

1. 创建一个Shell脚本

Shell脚本是一个文本文件,文件扩展名通常为.sh。让我们从创建一个简单的Shell脚本开始。

  1. 打开终端。
  2. 使用nanovim等文本编辑器创建一个新的Shell脚本文件:

bash

nano myscript.sh

  1. 编写第一行代码,指定Shell类型:

bash

#!/bin/bash

这行称为shebang,告诉系统使用哪个Shell来执行脚本。

  1. 继续添加简单的命令,例如打印消息:

bash

echo "Hello, World!"

  1. 保存并退出编辑器。对于nano,按Ctrl + O,然后按Enter保存,最后按Ctrl + X退出。

2. 赋予执行权限

在执行Shell脚本之前,需要保证它具有执行权限。通过以下命令为脚本赋予执行权限:

bash

chmod +x myscript.sh

3. 执行Shell脚本

执行Shell脚本可以使用以下两种方式:

  1. 直接通过相对路径运行:

bash

./myscript.sh

  1. 通过bash命令运行:

bash

bash myscript.sh

三、Shell脚本的结构与命令

1. 基本命令

在Shell脚本中可以使用大多数常用的Shell命令,以下是几种常用命令的介绍:

echo:打印文本到标准输出。

bash

echo "This is a Shell script."

read:从标准输入读取用户输入并存储到变量中。

bash

echo "Enter your name:"read nameecho "Hello, $name!"

printf:格式化输出。

bash

printf "Name: %s\nAge: %d\n" "$name" "$age"

2. 变量

在Shell脚本中,可以用变量存储数据,变量名不能以数字开头,且不可以包含空格。使用=来赋值,注意等号两边不能有空格。

声明变量:

bash

name="John"

age=30

使用变量时需加上`- 使用变量时需加上符号:

bash

echo "Name: $name, Age: $age"

3. 控制结构

控制结构是用来控制脚本执行流程的,主要包括条件语句和循环语句。

1. 条件语句

if语句:判断条件并执行相应代码。

bash

if [ $age -lt 18 ]; then

    echo "You are a minor."else

    echo "You are an adult."fi

2. 循环语句

for循环:遍历列表。

bash

for i in {1..5}; do

    echo "Looping ... number $i"done

while循环:在条件为真时执行循环。

bash

count=1while [ $count -le 5 ]; do

    echo "Count: $count"

    ((count++))done

4. 函数

函数是Shell脚本中用来组织代码的逻辑块。使用后可以通过函数名来调用。

bash

my_function() {

    echo "This is a function."

}

my_function  # 调用函数

四、脚本中的输入与输出

1. 命令行参数

脚本可以接收命令行参数,使用特殊变量$1$2, ..., $N来获取第一个、第二个等参数。$0表示脚本的名称。

bash

echo "Script name: $0"echo "First parameter: $1"echo "Second parameter: $2"

执行脚本时传递参数:

bash

./myscript.sh Hello World

2. 重定向输入输出

将输出重定向到文件:

bash

echo "Logging output" > output.txt  # 会覆盖文件echo "Logging more output" >> output.txt  # 追加到文件

从文件读取输入:

bash

input_file="input.txt"while read line; do

    echo "Line: $line"done < "$input_file"

五、实用Shell脚本示例

以下是几个实用的Shell脚本示例,帮助您理解如何将所学知识应用到实践中。

1. 自动备份脚本

该脚本会备份指定目录的内容到指定的备份目录。

bash

#!/bin/bash

SOURCE_DIR="/path/to/source/directory"

BACKUP_DIR="/path/to/backup/directory"

# 创建备份目录(如不存在)mkdir -p "$BACKUP_DIR"

# 复制文件cp -r "$SOURCE_DIR"/* "$BACKUP_DIR"

echo "Backup completed from $SOURCE_DIR to $BACKUP_DIR"

2. 简单的用户提示脚本

该脚本提示用户输入他们的名字,并打印欢迎消息。

bash

#!/bin/bash

echo "What is your name?"read nameecho "Hello, $name! Welcome to the Shell scripting world."

3. 检查系统磁盘使用情况

该脚本检查系统的磁盘使用情况,并仅报告使用超过80%磁盘空间的挂载点。

bash

#!/bin/bash

echo "Checking disk usage..."for partition in $(df -h | awk '{print $1}' | tail -n +2); do

    usage=$(df -h "$partition" | grep -v Filesystem | awk '{print $5}' | sed 's/%//')

    if [ "$usage" -gt 80 ]; then

        echo "Warning: $partition is ${usage}% full."

    fidone

六、调试Shell脚本

编写的Shell脚本可能会出现错误,调试是必不可少的。可以通过以下方式进行调试:

  1. 使用set -x:在脚本的开头添加这行命令,可以显示每个命令的执行情况。

bash

#!/bin/bashset -x

查看错误信息:在终端执行脚本时,如果有错误,Shell会输出错误信息,方便进行调试。

使用echo打印调试信息:在脚本中使用echo输出调试信息,帮助确认错误出现的位置。

bash

echo "Current directory: $(pwd)"

七、常用的Shell脚本工具与资源

1. 参考手册

man命令:查阅Shell的手册页。

bash

man bash

info命令:提供Shell命令的详细信息。

bash

info bash

2. 在线资源

官方网站:访问GNU Bash的官方网站了解最新信息和文档。

博客与论坛:寻找与Shell脚本相关的博客、论坛和社群,与他人交流学习经验。

八、总结

在本篇文章中,我们介绍了Shell脚本的基本概念、编写方法、常用命令及其结构。通过这些内容,您现在能够创建简单的自动化脚本来管理日常任务。Shell脚本是Linux用户的重要工具,它帮助我们提高效率,简化操作。

键入Shell脚本的过程可能开始时会有些困难,但通过反复练习与实践,您会变得更加熟练。希望本篇文章能够为您在Shell脚本编写之路上提供帮助,期待您在实际操作中创造出更有效的自动化解决方案。在接下来的系列文章中,我们将深入探讨Linux的更多功能,期待与您共同探索!

相关文章:

【Linux基础知识系列】第九篇-Shell脚本入门

在Linux世界中&#xff0c;Shell脚本是自动化任务和简化操作的重要工具。它可以帮助用户编写一系列命令&#xff0c;自动执行重复的任务&#xff0c;从而提高工作效率。在本篇文章中&#xff0c;我们将介绍Shell脚本的基本概念、编写方法、常用命令和结构。通过这些内容&#x…...

typescript的Interface和Type

类型别名和接口非常相似&#xff0c;在大多数情况下你可以在它们之间自由选择。 几乎所有的 interface 功能都可以在 type 中使用&#xff0c;关键区别在于不能重新开放类型以添加新的属性&#xff0c;而接口始终是可扩展的。 // window.ts.transpileModule(src, {}); 这是调…...

java后端生成心电图-jfreechart

用jfreechart生成心电图 先上成功的图片 上代码 1.导入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.实现代码 对数据进行滤波 转换单位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…...

算法/机理模型演示平台搭建(二)——算法接口部署(FastApi)

算法/机理模型演示平台搭建(二)—— 算法接口部署(FastApi) 1. 项目结构2. 构建 Docker 镜像3. 运行 Docker 容器4. 访问 API 文档5. 调用 API1. 项目结构 app app/algorithms app/models Dockerfile FROM python:3.9-slimWORKDIR /codeCOPY ./requirements.txt /code…...

动态规划-647.回文子串-力扣(LeetCode)

一、题目解析 这里的子字符串是连续的&#xff0c;与之前的子序列不同&#xff0c;这里需要我们统计回文子串的数目。 二、算法原理 这里也有其他算法可以解决该问题&#xff0c;如中心扩展算法 时间复杂度O(N^2)/空间复杂度O(1)&#xff0c;马拉车算法(具有局限性) 时间复杂…...

es 的字段类型(text和keyword)

Text 当一个字段是要被全文检索时&#xff0c;比如 Email 内容、产品描述&#xff0c;这些字段应该使用 text 类型。设置 text 类型以后&#xff0c;字段内容会被分析&#xff0c;在生成倒排索引之前&#xff0c;字符串会被分析器分词。text类型的字段不用于排序&#xff0c;很…...

Kotlin 中companion object {} 什么时候触发

在 Kotlin 中&#xff0c;companion object 的初始化触发时机是一个重要但容易被忽视的细节。以下是详细的解释&#xff1a; 1. 基本触发时机 companion object 的初始化发生在&#xff1a; 首次访问该类时&#xff08;无论是访问伴生对象成员、创建类实例&#xff0c;还是通过…...

仿真每日一练 | Workbench中接触种类及选择方法简介

Workbench中给我们提供的接触类型主要包括以下几种&#x1f447; ◆ 1、摩擦 ◆ 2、无摩擦 ◆ 3、绑定 ◆ 4、不分离 ◆ 5、粗糙 ◆ 6、强制滑移 下面通过最常用的摩擦和绑定给大家展示两者的区别&#xff0c;同时文末也给大家介绍了几种接触的选择方法。首先先给大家介绍一下…...

Go语言中的rune和byte类型详解

1. rune类型 1.1. 基本概念 1. rune是Go语言的内建类型&#xff0c;它是int32的别名&#xff0c;即32位有符号整数&#xff1b; 2. 用于表示一个Unicode码点&#xff0c;全拼Unicode code point&#xff1b; 3. 可以表示任何UTF-8编码的字符&#xff1b; 1.2. 特点 1. 每…...

superior哥AI系列第6期:Transformer注意力机制:AI界的“注意力革命“

&#x1f3ad; superior哥AI系列第6期&#xff1a;Transformer注意力机制&#xff1a;AI界的"注意力革命" 嘿&#xff01;小伙伴们&#xff01;&#x1f44b; 今天superior哥要带你们探索AI界最火的技术——Transformer&#xff01;这个家伙可了不得&#xff0c;它不…...

【java面试】redis篇

redis篇 一、适用场景&#xff08;一&#xff09;缓存1、缓存穿透1.1 解决方案1&#xff1a;缓存空数据&#xff0c;查询返回的数据为空&#xff0c;将空结果缓存1.2 解决方案2&#xff1a;布隆过滤器 2、缓存击穿1.1 解决方案1&#xff1a;互斥锁1.2 解决方案2&#xff1a;逻辑…...

高效易用的 MAC 版 SVN 客户端:macSvn 使用体验

高效易用的 MAC 版 SVN 客户端&#xff1a;macSvn 使用体验 下载安装使用总结 最近有个项目要使用svn, 但是mac缺乏一款像 Windows 平台 TortoiseSVN 那样全面、高效且便捷的 SVN 客户端工具, 直到博主找到了该工具本文将结合实际使用体验&#xff0c;详细介绍 macSvn工具的核心…...

【搭建 Transformer】

搭建 Transformer 的基本步骤 Transformer 是一种基于自注意力机制的深度学习模型&#xff0c;广泛应用于自然语言处理任务。以下为搭建 Transformer 的关键步骤和代码示例。 自注意力机制 自注意力机制是 Transformer 的核心&#xff0c;计算输入序列中每个元素与其他元素的…...

自然图像数据集

目录 CIFAR-10 数据集CIFAR-100 数据集AFHQ 数据集FFHQ 数据集 CIFAR-10 数据集 简介&#xff1a; CIFAR-10 是一个经典的图像分类数据集&#xff0c;广泛用于机器学习领域的计算机视觉算法基准测试。它包含60000幅32x32的彩色图像&#xff0c;分为10个类&#xff0c;每类6000…...

Linux下使用nmcli连接网络

Linux下使用nmcli连接网络 介绍 在使用ubuntu系统的时候&#xff0c;有时候不方便使用桌面&#xff0c;使用ssh远程连接&#xff0c;可能需要使用nmcli命令来连接网络。本文将介绍如何使用nmcli命令连接网络。nmcli 是 NetworkManager 的命令行工具&#xff0c;用于管理网络连…...

HCIP(BGP综合实验)

一、实验拓扑 AS 划分&#xff1a; AS1&#xff1a;R1&#xff08;环回 L0:172.16.0.1/32&#xff0c;L1:192.168.1.0/24&#xff09;AS2&#xff1a;R2、R3、R4、R5、R6、R7&#xff08;内部运行 OSPF&#xff0c;AS 号为 64512 和 64513 的联盟&#xff09;AS3&#xff1a;R…...

Attention Is All You Need (Transformer) 以及Transformer pytorch实现

参考https://zhuanlan.zhihu.com/p/569527564 Attention Is All You Need (Transformer) 是当今深度学习初学者必读的一篇论文。 一. Attention Is All You Need (Transformer) 论文精读 1. 知识准备 机器翻译&#xff0c;就是将某种语言的一段文字翻译成另一段文字。 由…...

uniapp+vue2+uView项目学习知识点记录

持续更新中... 1、发送给朋友&#xff0c;分享到朋友圈功能开启 利用onShareAppMessage和onShareTimeline生命周期函数&#xff0c;在script中与data同级去写 // 发送给朋友 onShareAppMessage() {return {title: 清清前端, // 分享标题path: /pages/index/index, // 分享路…...

精美的软件下载页面HTML源码:现代UI与动画效果的完美结合

精美的软件下载页面HTML源码&#xff1a;现代UI与动画效果的完美结合 在数字化产品推广中&#xff0c;一个设计精良的下载页面不仅能提升品牌专业度&#xff0c;还能显著提高用户转化率。本文介绍的精美软件下载页面HTML源码&#xff0c;通过现代化UI设计与丰富的动画效果&…...

车载诊断架构 --- DTC消抖参数(Trip Counter DTCConfirmLimit )

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

javaEE->IO:

文件&#xff1a; 操作系统中会把很多 硬件设备 和 软件资源 抽象成“文件”&#xff0c;统一进行管理。 大部分谈到的文件&#xff0c;都是指 硬盘的文件&#xff0c;文件就相当于是针对“硬盘”数据的一种抽象 硬盘&#xff1a; 1.机械硬盘&#xff1a;便宜 2.固态硬盘&…...

Oracle 用户/权限/角色管理

1. 用户 1.1. 用户的创建和删除 1.1.1. 创建用户 create user user identified {by password | externally} [ default tablespace tablespace ] [ temporary tablespace tablespace ] [ quota {integer [k | m ] | unlimited } on tablespace [ quota {integer [k | m ] | …...

使用免费wordpress成品网站模板需要注意点什么

在使用免费 WordPress 成品网站模板时&#xff0c;需要从版权、安全性、兼容性、功能限制等多个方面谨慎考量&#xff0c;避免后续出现问题。以下是具体需要注意的要点&#xff1a; 一、版权与授权问题 明确授权类型 免费模板可能分为「开源免费」「限个人使用」「禁止商业用…...

深入理解 JSX:React 的核心语法

1. 什么是 JSX&#xff1f; JSX&#xff08;JavaScript And XML&#xff09;是 React 中最核心的概念之一&#xff0c;也是区别于 Vue 的一个重要特征&#xff08;尽管 Vue 现在也支持 JSX 语法&#xff09;。JSX 是一种在 JavaScript 中编写 HTML 代码片段的语法协议&#xf…...

工厂方法模式深度解析:从原理到应用实战

作者简介 我是摘星&#xff0c;一名全栈开发者&#xff0c;专注 Java后端开发、AI工程化 与 云计算架构 领域&#xff0c;擅长Python技术栈。热衷于探索前沿技术&#xff0c;包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践&#xff0c;乐于分享实战经验与…...

TS 星际通信指南:从 TCP 到 UDP 的宇宙漫游

文章目录 一、计算机网络通信1、基本概念2、核心要素&#xff08;一&#xff09;终端设备&#xff08;二&#xff09;通信介质&#xff08;三&#xff09;网络协议 3、常用通信模型&#xff08;一&#xff09;OSI 七层模型&#xff08;理论框架&#xff09;&#xff08;二&…...

python可视化:端午假期旅游火爆原因分析

python可视化&#xff1a;端午假期旅游火爆原因分析 2025年的旅游市场表现强劲&#xff1a; 2025年端午假期全社会跨区域人员流动量累计6.57亿人次&#xff0c;日均2.19亿人次&#xff0c;同比增长3.0%。入境游订单同比大涨近90%&#xff0c;门票交易额&#xff08;GMV&#…...

Missashe考研日记—Day51-Day57

Missashe考研日记—Day51-Day57 写在面前 本系列博客用于记录博主一周的学习进度。线代题型总结 专业课408 这周简直是拼命学计网&#xff0c;花了两三天速通传输层和应用层内容&#xff0c;又臭又长的网课听不下去一点了&#xff0c;赶紧结束准备开二轮进行复习和刷题了。…...

electron-vite_18桌面共享

electron默认不支持桌面共享&#xff0c;需要添加desktopCapturer配置&#xff0c;这样在使用navigator.mediaDevices.getUserMedia API访问可用于从桌面捕获音频和视频的媒体源的信息。 electron版本 "electron": "^31.0.2",在main.js中添加desktopCaptu…...

SOC-ESP32S3部分:28-BLE低功耗蓝牙

飞书文档https://x509p6c8to.feishu.cn/wiki/CHcowZMLtiinuBkRhExcZN7Ynmc 蓝牙是一种短距的无线通讯技术&#xff0c;可实现固定设备、移动设备之间的数据交换&#xff0c;下图是一个蓝牙应用的分层架构&#xff0c;Application部分则是我们需要实现的内容&#xff0c;Protoc…...