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由来 在软件开发的过程中,通常…

python基础教程九 抽象三(函数参数续)

1. 关键字参数和默认值 前面使用的都是位置参数,因为它们的位置至关重要。本节介绍的技巧让你能完全的忽略位置。要熟悉这种技巧需要一段时间,但随着程序规模的增大,你很快就发现它很有用。 >>> def hello_1(greeting,name): ... …

力扣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写入权…

Ansible手册

Ansible常用命令 ansible ansible-config ansible-config list ansible-config dump ansible-config viewansible-connection ansible-console ansible-doc ansible-galaxy ansible-inventory ansible-playbook ansible-pull ansible-vault ansible myhost -m setup# 查看当…

第31关 代码仓库Gitlab的升级之路

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。 在2021年&#xff0c;博哥分享了完整的一套K8S架构师课程&#xff0c;链接在此&#xff0c;最后的CI/CD自动化流水线就是基于gitlab来完成的。那么时间过去2年多了&#xff0c;gitlab版本也更…

递归实现n的k次方

题目&#xff1a; 编写一个函数实现n的k次方&#xff0c;使用递归实现。 代码实现&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>int Pow(int x,int n) {if (n 1)return x;elsereturn x * Pow(x, n - 1); }int main() {int x, n;scanf("%d …

在C#中调用C++函数并返回const char*类型的值

在C#中调用C函数并返回const char*类型的值&#xff0c;可以使用Interop服务来实现。以下是一个示例代码&#xff1a; C代码&#xff08;generate_project_code.cpp&#xff09;&#xff1a; const char* generateProjectCode() {const char* code "Generated code&quo…

【BIAI】Lecture 6 - Somatosensory systems

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

python量化学习笔记

with open(path_dst, ab) as f: 1、表示文件如果存在&#xff0c;在文件末尾添加二进制数据&#xff1b;不存在会创建一个新的二进制文件用于追加数据 Config CommonST()Create_string_buffer(config.size)If mode_extract:For row in df_data.intertuples()If row[-2]!0:Co…

JAVA的基础面试三

1.何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗? 答&#xff1a;用于创建bean对象,管理bean对象的那个容器 Spring IOC 容器本质上指的的就是Spring Bean容器, Spring Bean容器中最核心一个机制是IOC机制( 控制反转),所以有时候又将springbean容器称之…

视觉空间效应

一、视觉空间效应 概况 视觉空间效应&#xff0c;是人类视觉系统&#xff08;Human Visual System&#xff0c;HVS&#xff09;的一个特点&#xff0c;也称为"视觉距离效应"。即距离观察者更近的目标像素对颜色感知产生更强烈的影响&#xff0c;而距离较远的目标像素…

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【先完成刷新页面】 科…