shell脚本基础演练

简介

Shell脚本是一种用于自动化执行一系列命令的脚本语言。在Unix和类Unix系统中,常见的Shell包括Bash、Zsh、Sh等。下面我将简要讲解Shell脚本的基本结构和一些常用写法,并附上一些标准的例子。

基础示例

基本结构

#!/bin/bash
# 注释: 这是一个简单的Shell脚本# 命令1
# 命令2
# ...# exit 0  # 退出状态码,0表示成功,非0表示错误

#!/bin/bash: 指定解释器为Bash。
注释: 使用#符号表示注释。
exit 0: 退出状态码,0表示成功,非0表示错误。
变量和赋值

#!/bin/bash
name="John"
echo "Hello, $name!"

name=“John”: 定义变量name并赋值为"John"。
echo “Hello, $name!”: 打印带变量的字符串。
输入和输出

#!/bin/bashecho "What is your name?"
read name
echo "Hello, $name!"

read name: 从用户输入中读取值,并将其赋给变量name。
echo “Hello, $name!”: 打印带变量的字符串。
条件判断

#!/bin/bashread -p "Enter a number: " numif [ $num -eq 0 ]; thenecho "该数字为零。"
elif [ $num -gt 0 ]; thenecho "这个数字是正数。"
elseecho "该数字为负数。"
fi

read -p "Enter a number: " num: 从用户输入中读取数字。
if [ $num -eq 0 ]; then: 使用if语句进行条件判断。
-eq, -gt: 分别表示等于和大于。
fi: 结束if语句。
循环

#!/bin/bashfor i in {1..5}; doecho "Count: $i"
done

for i in {1…5}; do: 使用for循环从1到5。
echo “Count: $i”: 打印带变量的字符串。
函数

#!/bin/bashfunction greet {echo "Hello, $1!"
}greet "Alice"

function greet {: 定义函数greet。
greet “Alice”: 调用函数,并传递参数。
文件操作

#!/bin/bashfile="example.txt"if [ -e $file ]; thenecho "$file exists."
elseecho "$file does not exist."
fi

-e: 检查文件是否存在。
[ -e $file ]: 使用if语句进行文件存在性判断。
文件迭代

#!/bin/bashfor file in *.txt; doecho "Processing $file..."
done

列出目录中所有文件

#!/bin/bashfor item in $(ls); doecho "Item: $item"
done

脚本实战

脚本需求
需要对一个MySQL数据库进行定期备份,以防止数据丢失或意外删除。
需要在备份完成后,将备份文件保存到指定的目录中,便于后续恢复或管理。
需要记录执行备份过程中的日志,以便随时了解备份的状态和详细信息。
如果备份目录不存在,需要自动创建该目录,确保备份文件可以正确存储。
如果备份过程中出现错误,需要及时捕捉并记录错误信息,并能够对错误情况进行处理和通知。
参考答案

#!/bin/bash# 数据库凭据
db_user="用户名"
db_password="密码"
db_name="数据库名"# 备份目录
backup_dir="/路径/到/备份目录"# 日志函数
log() {local datetime=$(date "+%Y-%m-%d %H:%M:%S")echo "[$datetime] $1"
}# 数据库备份函数
backup_database() {local backup_file="$backup_dir/备份_$(date +%Y%m%d%H%M%S).sql"mysqldump -u $db_user -p$db_password $db_name > $backup_fileif [ $? -eq 0 ]; thenlog "备份成功: $backup_file"elselog "备份失败."exit 1fi
}# 主脚本
log "开始数据库备份流程..."# 检查备份目录是否存在,不存在则创建
if [ ! -d "$backup_dir" ]; thenmkdir -p "$backup_dir"log "创建备份目录: $backup_dir"
fi# 执行数据库备份
backup_databaselog "数据库备份流程完成."

脚本释义

# 数据库凭据
db_user="用户名"
db_password="密码"
db_name="数据库名"

在脚本的开头,我们定义了一些数据库相关的凭据,包括用户名、密码和数据库名。在实际应用中,这些凭据应该根据实际情况进行配置。

# 备份目录
backup_dir="/路径/到/备份目录"

定义了数据库备份文件存放的目录路径。同样,需要根据实际情况进行配置。

# 日志函数
log() {local datetime=$(date "+%Y-%m-%d %H:%M:%S")echo "[$datetime] $1"
}

定义了一个日志函数log,用于打印带有时间戳的日志信息。这有助于在脚本执行时记录关键事件。

# 数据库备份函数
backup_database() {local backup_file="$backup_dir/备份_$(date +%Y%m%d%H%M%S).sql"mysqldump -u $db_user -p$db_password $db_name > $backup_fileif [ $? -eq 0 ]; thenlog "备份成功: $backup_file"elselog "备份失败."exit 1fi
}

这是主要的数据库备份函数。它使用mysqldump命令将指定数据库的内容导出到一个以时间戳命名的SQL文件中。如果备份成功,输出成功日志;如果备份失败,输出失败日志并使用exit 1退出脚本,表示错误状态。

# 主脚本
log "开始数据库备份流程..."# 检查备份目录是否存在,不存在则创建
if [ ! -d "$backup_dir" ]; thenmkdir -p "$backup_dir"log "创建备份目录: $backup_dir"
fi# 执行数据库备份
backup_databaselog "数据库备份流程完成."

在主脚本部分,首先记录一个开始备份的日志。然后,通过if语句检查备份目录是否存在,如果不存在则创建。最后,调用backup_database函数执行数据库备份。最后,输出备份流程完成的日志。
这个脚本可以在定期任务中运行,用于自动备份数据库,并通过日志记录备份过程中的关键事件。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是ORM思想?

1. ORM概念 ORM(Object Relational Mapping)对象关系映射模式,是一种技术,解决了面向对象与关系型数据库存互不匹配的现象。 ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 2. ORM由来 在软件开发的过程中,通常…

力扣279. 完全平方数

动态规划 思路&#xff1a; 假设 dp[i] 为最少组成数 i 的平方数个数&#xff1b;则其上一个状态为 dp[i - j^2] 1&#xff0c;1 为 j^2&#xff1a; 即 i 的最少完全平方数 i - j^2 的最少完全平方数 1&#xff0c;其中 j^2 < i 为最接近 i 的平方数&#xff1b;初始值…

云计算管理-linux

1.权限 基本权限与归属 访问权限 读取&#xff1a;允许查看内容-read r 写入&#xff1a;允许修改内容-write w 可执行&#xff1a;允许运行和切换-excute x 对于文本文件&#xff1a; r读取权限&#xff1a;cat、less、grep、head、tail w写入权…

【BIAI】Lecture 6 - Somatosensory systems

Lecture 6- Somatosensory systems 专业术语 somatosensory system 体感系统 Thermoreceptors 温度感受器 Photoreceptors 光感受器 Chemoreceptoprs 化学感受器 hairy skin 毛发皮肤 glabrous skin 光滑皮肤 sensory receptors 感觉受体 dermal 真皮的 epidermal 表皮的 axon…

PSIM仿真DSP28335ADC功能并使用SCI串口模块输出曲线

在使用PSIM 2022 软件仿真DSP28335单片机时&#xff0c;发现里面还有SCI串口打印模块&#xff0c;在仿真软件里面可以看到串口数据&#xff0c;但是将代码下载到单片机上之后&#xff0c;使用串口助手却看不到任何数据&#xff0c;经过一番探索终于发现&#xff0c;串口不是这样…

C语言或C++通过IShellLinkA创建或解析lnk快捷方式(使用char字符数组)

本例程用到的COM接口有IShellLinkA和IPersistFile。 请注意因为函数参数的类型不为BSTR&#xff0c;所以这两个接口可直接传char *或wchar_t *字符串&#xff0c;不需要提前转化为BSTR类型。 C语言的写法&#xff1a; /* 这个程序只能在C编译器下编译成功, 请确保源文件的扩展…

Linux基本常用命令大全(一)

一、基本命令 1.1 关机和重启 关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机 重启 shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启 reboot 立刻重启 1.2 帮助命令 –help命令 shutdown --help&#xff1a; ifconfig --help&#xff1a…

Spring Boot的创建和使用

Spring的诞生是为了简化Java程序开发的&#xff0c;而Spring Boot的诞生是为了简化Spring程序开发的。 目录 Spring Boot 的优点 Spring Boot 项目创建 Spring Boot 目录介绍 Spring Boot 运行 Spring Boot 的优点 快速集成框架&#xff0c;Spring Boot 提供了启动添加依赖…

Java毕业设计-基于ssm的学生社团活动管理系统-第82期

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的学生社团活动管理系统&#xff1a;前端 jsp、jquery、ajax&#xff0c;后端 springmvc、spring、mybaties&#xff0c;角色分为管理员、学生、社团、用户&#…

K8s知识点总结_part2

为什么我们会需要 Pod&#xff1f; 容器的本质是一种特殊的进程&#xff0c;如果映射到系统中&#xff0c;容器镜像就是这个系统里的“.exe”安装包。 那么 Kubernetes 呢&#xff1f;Kubernetes 就是操作系统 在一个真正的操作系统里&#xff0c;进程并不是“孤苦伶仃”地独…

Java SE:面向对象(下)

1. static关键字 静态区的特点&#xff1a;静态区里面的每一样东西都是唯一有且仅有一个的&#xff0c;如此时str1 "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1&#xff0c;后面在进行赋值也不会在静态区开辟一串新的"abc" 1.1 static修…

【超简版,代码可用!】【0基础Python爬虫入门——下载歌曲/视频】

安装第三方模块— requests 完成图片操作后输入&#xff1a;pip install requests 科普&#xff1a; get:公开数据 post:加密 &#xff0c;个人信息 进入某音乐网页&#xff0c;打开开发者工具F12 选择网络&#xff0c;再选择—>媒体——>获取URL【先完成刷新页面】 科…

庞加莱猜想与品牌营销:网络集成化生态系统的力量

在数学界&#xff0c;庞加莱猜想一直是一个令人着迷的问题。而今&#xff0c;这一猜想与品牌营销产生了奇妙的联系。本文将结合庞加莱猜想&#xff0c;探讨品牌如何通过网络集成化生态系统实现低成本的市场推广&#xff0c;唤醒需求侧需求并扩展用户圈层。 首先&#xff0c;庞…

软考14-上午题-编译、解释程序翻译阶段

一、编译、解释程序【回顾】 目的&#xff1a;高级程序设计语言&#xff08;汇编语言、高级语言&#xff09;—【翻译】—>机器语言 1-1、编译方式 将高级语言书写的源程序——>目标程序&#xff08;汇编语言、机器语言&#xff09; 包含的工作阶段&#xff1a;词法分…

计算机中丢失VCRUNTIME140_1.dll

去微软官网下载安装 Visual C 下载地址&#xff1a;Latest supported Visual C Redistributable downloads | Microsoft Learn https://aka.ms/vs/17/release/vc_redist.x64.exe Visual Studio 2015、2017、2019 和 2022 下表列出了 Visual Studio 2015、2017、2019 和 2022 …

OSS存储引擎如何使用以及如何添加图片【建议收藏】

Aliyun OSS对象存储&#xff0c;可以用来做文件服务器&#xff0c;存放一些文件&#xff0c;图片等资源&#xff0c;那么我们使用OSS&#xff0c;需要经历以下步骤&#xff1a; 这里就从如何开通OSS服务开始进行&#xff0c;到如何上传一个资源文件到OSS结束。 1、阿里云注册 …

贪心算法详解

文章目录 前言一、什么是贪心算法二、贪心算法的特点1.贪心策略的提出2.贪心策略的正确性 三、学习贪心算法的方向总结 前言 在本次文章中我们将会详细介绍贪心算法的相关内容 一、什么是贪心算法 贪心算法&#xff1a;在解决问题时&#xff0c;每一步都选择最优解&#xff0…

Linux:vim的相关知识

目录 vim 是一个较为常见的编译文件的命令操作。 三种模式的区分的作用如下&#xff1a; 命令模式&#xff1a; 插入模式&#xff1a; 进入插入模式的标志&#xff1a;左下角有INSERT 底行模式&#xff1a; 命令模式的常见命令&#xff1a; 底行模式常见命令&#xff1…

初识k8s(概述、原理、安装)

文章目录 概述由来主要功能 K8S架构架构图组件说明ClusterMasterNodekubectl 组件处理流程 K8S概念组成PodPod控制器ReplicationController&#xff08;副本控制器&#xff09;ReplicaSet &#xff08;副本集&#xff09;DeploymentStatefulSet &#xff08;有状态副本集&#…

借助GPT,我是如何帮同事秒解bug

背景 昨天晚上8点多&#xff0c;正准备下班 同事突然跑过来&#xff0c;问我&#xff1a;为什么用aws命令行下载的数据可以正常下载&#xff0c;但是我用Go写的&#xff0c;怎么下载不下来 看他抓耳挠腮&#xff0c;然后又说困扰了很久 我心想这么简单的问题&#xff0c;额。。…