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

Linux安全与高级应用(五)深入探讨Linux Shell脚本应用:从基础到高级

文章目录

      • 深入探讨Linux Shell脚本应用:从基础到高级
        • 引言
        • 一、Shell脚本基础知识
          • 1. Shell的作用与分类
          • 2. 编写第一个Shell脚本
        • 二、Shell变量的使用
          • 1. 变量的类型与定义
          • 2. 引号的使用
          • 3. 位置变量与预定义变量
        • 三、重定向与管道操作
          • 1. 重定向操作
          • 2. 管道操作
        • 四、计划任务与自动化管理
          • 1. 计划任务
          • 2. 自动化管理
        • 五、实例应用:编写并使用Shell脚本
          • 1. 编写登录欢迎脚本
          • 2. 服务控制脚本
        • 六、总结与展望

👍 个人网站:【 洛秋小站】【洛秋资源小站】

深入探讨Linux Shell脚本应用:从基础到高级

引言

Linux操作系统以其高效、安全和灵活的特点在服务器、开发和科研领域占据着重要地位。Shell作为Linux的命令解释器,提供了一种强大的脚本编程环境,使得用户可以通过编写脚本来实现自动化任务管理和系统维护。本文将详细介绍Shell脚本的基础知识、变量的使用、重定向与管道操作、计划任务与自动化管理等内容,旨在帮助读者全面掌握Linux Shell脚本的应用。

一、Shell脚本基础知识
1. Shell的作用与分类

Shell作为命令解释器,是用户与Linux内核之间的桥梁。它接收用户输入的命令,并将其翻译成内核能够理解的操作。常见的Shell包括Bash、Sh、Csh等,每种Shell在指令集和环境变量处理上都有一定的差异。

2. 编写第一个Shell脚本

在Linux中,编写Shell脚本通常通过文本编辑器进行,例如vinano。编写一个简单的脚本只需按顺序写入每条Linux命令,并保存为.sh文件。例如,以下是一个简单的Shell脚本:

#!/bin/bash
# This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括:"
ls -lh vml*

保存文件后,需要赋予其可执行权限:

chmod +x first.sh

执行脚本的方式有多种,包括直接运行脚本路径、使用sh命令或使用source命令。

二、Shell变量的使用
1. 变量的类型与定义

Shell脚本中的变量分为自定义变量、环境变量、位置变量和预定义变量。自定义变量是用户定义的,格式为变量名=变量值,例如:

Product=Benet
Version=4.0
2. 引号的使用

在Shell脚本中,变量的赋值和引用可以使用单引号、双引号和反撇号,不同引号有不同的作用:

  • 单引号:禁止引用其他变量值,$符号视为普通字符。
  • 双引号:允许通过$符号引用其他变量值。
  • 反撇号:用于命令替换,提取命令执行后的输出结果。

例如:

echo "Product is $Product"
3. 位置变量与预定义变量

位置变量用于传递脚本参数,例如$1$2等。预定义变量如$#表示位置变量的个数,$*表示所有位置变量的内容,$?表示上一条命令的返回状态。

三、重定向与管道操作
1. 重定向操作

重定向用于控制命令的输入输出,常见的重定向符号包括>>><2>等。例如,将命令输出重定向到文件:

ls -lh > output.txt
2. 管道操作

管道操作符|用于将一个命令的输出作为另一个命令的输入。例如:

grep "bash$" /etc/passwd | awk -F: '{print $1 $7}'
四、计划任务与自动化管理
1. 计划任务

Linux中的计划任务由cron服务管理,通过crontab命令配置定时任务。以下是一个示例,设置每天凌晨2:30执行数据库备份脚本:

30 2 * * * /opt/qnzx_dbbak/qnzx_dbbak.sh
2. 自动化管理

通过编写脚本,用户可以实现系统的自动化管理,如定期备份、日志清理等。例如,编写一个自动备份脚本:

#!/bin/bash
TARFILE=backup-`date +%s`.tgz
tar zcf $TARFILE $* &> /dev/null
echo "已完成备份,备份文件为$TARFILE"
五、实例应用:编写并使用Shell脚本
1. 编写登录欢迎脚本

编写一个welcome.sh脚本,在用户登录时显示系统信息:

#!/bin/bash
echo "欢迎登录,当前时间为:`date`"
echo "系统信息如下:"
uname -a

并在用户的.bash_profile中添加调用脚本的命令:

if [ -f ~/welcome.sh ]; then. ~/welcome.sh
fi
2. 服务控制脚本

编写startstopstatus脚本,用于控制系统服务,例如:

#!/bin/bash
if [ -z "$1" ]; thenecho "Usage: $0 {start|stop|status} servicename"exit 1
fiACTION=$1
SERVICE=$2case $ACTION instart)/etc/init.d/$SERVICE start;;stop)/etc/init.d/$SERVICE stop;;status)/etc/init.d/$SERVICE status;;*)echo "Invalid action"exit 1;;
esac
六、总结与展望

本文详细介绍了Linux Shell脚本的基础知识、变量使用、重定向与管道操作以及计划任务与自动化管理。通过实例讲解,读者可以更好地理解Shell脚本的应用,并在实际工作中灵活运用。随着Linux的发展,Shell脚本将继续发挥其不可替代的作用,成为系统管理和开发中的重要工具。

👉 最后,愿大家都可以解决工作中和生活中遇到的难题,剑锋所指,所向披靡~

相关文章:

Linux安全与高级应用(五)深入探讨Linux Shell脚本应用:从基础到高级

文章目录 深入探讨Linux Shell脚本应用&#xff1a;从基础到高级引言一、Shell脚本基础知识1. Shell的作用与分类2. 编写第一个Shell脚本 二、Shell变量的使用1. 变量的类型与定义2. 引号的使用3. 位置变量与预定义变量 三、重定向与管道操作1. 重定向操作2. 管道操作 四、计划…...

Java中等题-解码方法(力扣)

一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; "1" -> A "2" -> B ... "25" -> Y "26" -> Z 然而&#xff0c;在 解码 已编码的消息时&#xff0c;你意识到有许多不同的方式来解码&#xff0c;因为有些…...

【Git】git 从入门到实战系列(二)—— Git 介绍以及安装方法

文章目录 一、前言二、git 是什么三、版本控制系统是什么四、本地 vs 集中式 vs 分布式本地版本控制系统集中式版本控制系统分布式版本控制系统 五、安装 git 一、前言 本系列上一篇文章【Git】git 从入门到实战系列&#xff08;一&#xff09;—— Git 的诞生&#xff0c;Lin…...

【QT 5 QT 6 构建工具qmake-cmake-和-软件编译器MSVCxxxvs MinGWxxx说明】

【QT 5报错&#xff1a;/xxx/: error: ‘class Ui::frmMain’ has no member named ‘xxx’-和-软件编译器MSVCxxxvs MinGWxxx说明】 1、前言2 、qt 中 Qmake CMake 和 QBS1-qmake2-Cmake3-QBS4-官网一些说法5-各自特点 3、软件编译套件1-Desktop Qt 6.7.2 llvm-mingw 64-bit2-…...

SD卡参数错误:深度解析与数之寻软件恢复实战

一、SD卡参数错误&#xff1a;数据与设备的隐形杀手 在数字化时代&#xff0c;SD卡作为便携存储设备&#xff0c;广泛应用于相机、手机、无人机及各类电子设备中&#xff0c;承载着人们珍贵的照片、视频、文档等重要数据。然而&#xff0c;SD卡在使用过程中&#xff0c;有时会…...

深入理解和应用RabbitMQ的Work Queues模型

文章目录 1. 场景模拟2. 消息发送3. 消息接收4. 测试5. 能者多劳6. 总结 当你在处理消息时&#xff0c;可能会遇到这样的问题&#xff1a;消息的生产速度远远大于消费速度&#xff0c;导致消息堆积。这时候&#xff0c;Work Queues&#xff08;工作队列&#xff09;模型就能派上…...

嵌入式面试八股文(三)·野指针产生原因和解决方法、指针函数和函数指针的区别

目录 1. 野指针产生原因和解决方法 1.1 产生的原因 1.1.1 指针未能初始化 1.1.2 指针指向的内存被释放 1.1.3 指针指向的对象被重复释放 1.2 解决方法 1.2.1 初始化指针 1.2.2 指针空置 1.2.3 避免悬挂指针 2. 指针函数和函数指针的区别 2.1 定义不同 2…...

OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义

在OpenCV中&#xff0c;创建图像时需要指定图像的类型&#xff0c;这些类型通常通过常量来表示&#xff0c;例如 CV_8UC1、CV_32FC3、CV_32S 等。这些常量定义了图像的数据类型和通道数&#xff0c;具体含义如下&#xff1a; CV_8UC1&#xff1a; CV_8U 表示每个像素由一个8位无…...

v 3 + vite + ts 自适应布局(postcss-pxtorem)

1、 当pc端、移动端H5等项目中&#xff0c;需要根据当前浏览器窗口或屏幕尺寸&#xff0c;来自适应的改变页面内元素尺寸时&#xff0c;就可以借助下述插件和相关配置来实现。 2、适用范围&#xff1a;vue3 vite ts 步骤一&#xff1a;相关依赖下载下载相关依赖 npm inst…...

(MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2

文章简介 承接上一篇笔记,该份笔记是笔者深思熟虑后根据实战应用所总结出来的精华内容,该文章内容主要包括配置avc权限的使用场景以及其上下环节所需的准备。 使用场景 1.底层驱动有无配置好相应的串口 2.开启相应的selinux avc 权限 3.在framework层配置相应的 (config…...

Linux安全与高级应用(六)Linux Shell脚本编程的高级应用:条件测试与if语句的妙用

文章目录 Linux Shell脚本编程的高级应用&#xff1a;条件测试与if语句的妙用一、条件测试操作详解1. 字符串比较2. 整数比较3. 文件测试4. 逻辑测试 二、if语句的结构与应用1. 单分支结构2. 双分支结构3. 多分支结构 三、实际应用案例1. 需求描述2. 实现思路3. 代码实现4. 设置…...

升级MacOS(Mojave)后使用git问题

将MacOS升级到Mojave版本后&#xff0c;使用git工具时&#xff0c;出现如下错误提示&#xff1a; guochongxindeMacBook-Pro:study guochongxin$ git status . xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Librar…...

基于PFC和ECN搭建无损RoCE网络的工作流程分析

无损RoCE网络概念 RDMA&#xff08;Remote Direct Memory Access&#xff0c;远程直接内存访问&#xff09;是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。RDMA 将用户应用中的数据直接传入服务器的存储区&#xff0c;通过网络将数据从一个系统快速传输到远程系…...

射频功率放大器调测简略

射频功率放大器除了在设计时的难度外&#xff0c;其次就是调测阶段&#xff0c;设计时仿真可以通过不断更改仿真参数来达到理想状态&#xff0c;更关键的是不用提心吊胆的把烧器件&#xff0c;而处于调测阶段则很容易出现烧坏器件的情况&#xff0c;特别是功率大的射频功率放大…...

Linux使用docker搭建Redis 哨兵模式

1. Redis Sentinel 简介 Redis Sentinel 是 Redis 高可用解决方案的一部分。它提供了监控、通知和自动故障转移功能&#xff0c;确保 Redis 集群在主节点发生故障时仍然可以继续工作。以下是 Redis Sentinel 的主要功能和作用&#xff1a;监控&#xff1a; Sentinel 会不断检查…...

springboot给类进行赋初值的四种方式

目录 1. 使用Value和ConfigurationProperties2. 使用PropertySource创建Person.java写一个测试类 3. 使用ImportResourceStudent类创建beans.xml在主类中引入测试 其他心得 1. 使用Value和ConfigurationProperties 这里不加赘述了&#xff0c;前面我也发过&#xff0c;这里就放…...

Day32 | 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

语言 Java 1049. 最后一块石头的重量 II 最后一块石头的重量 II 题目 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 …...

linux 查看一个端口是否被占用

1 linux命令 要在Linux中查看一个端口是否被占用&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开终端&#xff08;Terminal&#xff09;。 运行以下命令来列出系统上所有正在监听的端口及其对应的进程&#xff1a; sudo netstat -tuln | grep LISTEN这将显示所有正在…...

【Git】5. 配置 Git

配置.gitignore – 忽略特殊⽂件 在⽇常开发中&#xff0c;我们有些⽂件不想或者不应该提交到远端&#xff0c;⽐如保存了数据库密码的配置⽂件&#xff0c;那怎么让 Git 知道呢&#xff1f; 在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件&#xff0c;然后把要忽略的…...

C语言:文件处理

文件处理 一、文件的类型&#xff08;一&#xff09;文本文件和二进制文件 &#xff08;二&#xff09;程序文件和数据文件数据文件按照二进制储存 二、文件的打开和关闭&#xff08;一&#xff09;文件指针&#xff08;二&#xff09;文件的打开和关闭1、fopen2、fclose &…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...