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脚本通常通过文本编辑器进行,例如vi或nano。编写一个简单的脚本只需按顺序写入每条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. 服务控制脚本
编写start、stop、status脚本,用于控制系统服务,例如:
#!/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脚本应用:从基础到高级引言一、Shell脚本基础知识1. Shell的作用与分类2. 编写第一个Shell脚本 二、Shell变量的使用1. 变量的类型与定义2. 引号的使用3. 位置变量与预定义变量 三、重定向与管道操作1. 重定向操作2. 管道操作 四、计划…...
Java中等题-解码方法(力扣)
一条包含字母 A-Z 的消息通过以下映射进行了 编码 : "1" -> A "2" -> B ... "25" -> Y "26" -> Z 然而,在 解码 已编码的消息时,你意识到有许多不同的方式来解码,因为有些…...
【Git】git 从入门到实战系列(二)—— Git 介绍以及安装方法
文章目录 一、前言二、git 是什么三、版本控制系统是什么四、本地 vs 集中式 vs 分布式本地版本控制系统集中式版本控制系统分布式版本控制系统 五、安装 git 一、前言 本系列上一篇文章【Git】git 从入门到实战系列(一)—— Git 的诞生,Lin…...
【QT 5 QT 6 构建工具qmake-cmake-和-软件编译器MSVCxxxvs MinGWxxx说明】
【QT 5报错:/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卡参数错误:数据与设备的隐形杀手 在数字化时代,SD卡作为便携存储设备,广泛应用于相机、手机、无人机及各类电子设备中,承载着人们珍贵的照片、视频、文档等重要数据。然而,SD卡在使用过程中,有时会…...
深入理解和应用RabbitMQ的Work Queues模型
文章目录 1. 场景模拟2. 消息发送3. 消息接收4. 测试5. 能者多劳6. 总结 当你在处理消息时,可能会遇到这样的问题:消息的生产速度远远大于消费速度,导致消息堆积。这时候,Work Queues(工作队列)模型就能派上…...
嵌入式面试八股文(三)·野指针产生原因和解决方法、指针函数和函数指针的区别
目录 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中,创建图像时需要指定图像的类型,这些类型通常通过常量来表示,例如 CV_8UC1、CV_32FC3、CV_32S 等。这些常量定义了图像的数据类型和通道数,具体含义如下: CV_8UC1: CV_8U 表示每个像素由一个8位无…...
v 3 + vite + ts 自适应布局(postcss-pxtorem)
1、 当pc端、移动端H5等项目中,需要根据当前浏览器窗口或屏幕尺寸,来自适应的改变页面内元素尺寸时,就可以借助下述插件和相关配置来实现。 2、适用范围:vue3 vite ts 步骤一:相关依赖下载下载相关依赖 npm inst…...
(MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
文章简介 承接上一篇笔记,该份笔记是笔者深思熟虑后根据实战应用所总结出来的精华内容,该文章内容主要包括配置avc权限的使用场景以及其上下环节所需的准备。 使用场景 1.底层驱动有无配置好相应的串口 2.开启相应的selinux avc 权限 3.在framework层配置相应的 (config…...
Linux安全与高级应用(六)Linux Shell脚本编程的高级应用:条件测试与if语句的妙用
文章目录 Linux Shell脚本编程的高级应用:条件测试与if语句的妙用一、条件测试操作详解1. 字符串比较2. 整数比较3. 文件测试4. 逻辑测试 二、if语句的结构与应用1. 单分支结构2. 双分支结构3. 多分支结构 三、实际应用案例1. 需求描述2. 实现思路3. 代码实现4. 设置…...
升级MacOS(Mojave)后使用git问题
将MacOS升级到Mojave版本后,使用git工具时,出现如下错误提示: guochongxindeMacBook-Pro:study guochongxin$ git status . xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Librar…...
基于PFC和ECN搭建无损RoCE网络的工作流程分析
无损RoCE网络概念 RDMA(Remote Direct Memory Access,远程直接内存访问)是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。RDMA 将用户应用中的数据直接传入服务器的存储区,通过网络将数据从一个系统快速传输到远程系…...
射频功率放大器调测简略
射频功率放大器除了在设计时的难度外,其次就是调测阶段,设计时仿真可以通过不断更改仿真参数来达到理想状态,更关键的是不用提心吊胆的把烧器件,而处于调测阶段则很容易出现烧坏器件的情况,特别是功率大的射频功率放大…...
Linux使用docker搭建Redis 哨兵模式
1. Redis Sentinel 简介 Redis Sentinel 是 Redis 高可用解决方案的一部分。它提供了监控、通知和自动故障转移功能,确保 Redis 集群在主节点发生故障时仍然可以继续工作。以下是 Redis Sentinel 的主要功能和作用:监控: Sentinel 会不断检查…...
springboot给类进行赋初值的四种方式
目录 1. 使用Value和ConfigurationProperties2. 使用PropertySource创建Person.java写一个测试类 3. 使用ImportResourceStudent类创建beans.xml在主类中引入测试 其他心得 1. 使用Value和ConfigurationProperties 这里不加赘述了,前面我也发过,这里就放…...
Day32 | 1049. 最后一块石头的重量 II 494. 目标和 474.一和零
语言 Java 1049. 最后一块石头的重量 II 最后一块石头的重量 II 题目 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 …...
linux 查看一个端口是否被占用
1 linux命令 要在Linux中查看一个端口是否被占用,可以按照以下步骤进行操作: 打开终端(Terminal)。 运行以下命令来列出系统上所有正在监听的端口及其对应的进程: sudo netstat -tuln | grep LISTEN这将显示所有正在…...
【Git】5. 配置 Git
配置.gitignore – 忽略特殊⽂件 在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让 Git 知道呢? 在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的…...
C语言:文件处理
文件处理 一、文件的类型(一)文本文件和二进制文件 (二)程序文件和数据文件数据文件按照二进制储存 二、文件的打开和关闭(一)文件指针(二)文件的打开和关闭1、fopen2、fclose &…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
