导航:首页 > 编程语言 > shell编程实战系统备份脚本

shell编程实战系统备份脚本

发布时间:2023-04-30 19:03:23

❶ Shell脚本编程实战

做 Java 的肯定都接触过 linux 系统,那么很多时候我们在开发的过程中都是把我们项目打成一个jar包,或者是war包的形式,然后通过 XFTP 上传到我们服务器的指定目录,然后运行一端启动脚本,让我们的项目变得可以访问 就像 ./sh service.sh start 然后启动我们写好的 sh 的shell脚本。接下来我们就来学习一下关于 Shell 脚本是如何写出来的。

Shell 脚本是什么?Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等,也就是说,我们用户每输入一条命令,Shell 就会相对应的执行一条命令。当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。

在我们的 Shell 脚本中,会有各种各样的内容,赋值,计算,循环等一系列的操作,接下来我们就来看看这个 Shell 脚本怎么写吧

1.查看自己当前系统默认的 Shell

echo $SHELL

输出:/bin/bash

2.查看系统支持的Shell

cat /etc/shells

输出:

/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash

也就是说,我们的云服务器是支持我们在这里给他安排 Shell 脚本的

我们这时候先来安排一下 sh 的文件,创建一个文件夹,然后在其中创建一个 sh 的文件。

mkdir /usr/local/shelltest

touch test.sh

创建完成我们编辑一下内容

vim test.sh

然后我们出来运行一下我们的 Shell 的第一个脚本

bash test.sh

出来的结果是 Hello World Shell

一个及其简单的脚本出现了,接下我们就分析一波我们写了点啥?

#!/bin/bash

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell

我们在之前也使用了 echo $SHELL 来查看了自己系统默认的是哪一种 sh 解析器,之前看到的是/bin/bash,所以我们在写 Shell 脚本的时候,我们在开头默认的约定中,我们写了这个是用 /bin/bash 来进行解释的,

那么我们如何像之前调用我们的当前目录中的 Shell 脚本一样去调用他呢?就像这个样子的 ./sh service.sh start

1.授权,

我们先不授权试一下看看能通过 ./test.sh 进行调用么

bash: ./test.sh: Permission denied 会提示这个,也就是没有授权定义,

授权命令:chmod +x test.sh

2.执行 ./test.sh

然后调用就能正常输出了,就是说,在当前的目录下执行这个脚本命令。

变量命名实际上很简单,我们先来试一下

name=yikeji

这时候我们怎么使用变量呢?实际上只要在前面加上一个符号就可以 $

echo $name

上面的两种写法都是可以的,外面的大括号加和不加区别不大,可以省略,直接就 $name 就可以使用你定义的变量

使用括号的意义一般在于区别某些变量,比如你写了一串的内容,可能写的是 echo $nameismyfriend ,如果连在一起,是不是有点尴尬,这时候就可以使用括号区别一下, echo ${name}ismyfriend 不使用括号的时候,他就去找nameismyfriend这个变量了,就无法出来我们要的效果。

unset name

这时候我们就把我们刚才定义的 name=yikeji 这个变量给去掉了,我们可以调用一下我们的变量看是什么?

echo $name

这是不是就证明我们自己定义的变量已经删除了

那么我们需要一个关键字,大家肯定能想到是什么关键字 readonly

我们先给name赋值,然后使用 readonly 设置只读,然后再改变一下试试,

竟然是真的,如果不设置只读,是不是会重新可以进行赋值,我们测试个年龄,

所以我们就可以肯定,readonly就是设置只读的关键词,记住了么?

那么设置只读的变量可以删除么?毕竟总有杠精的面试官会提问这个棘手的问题,但是,阿粉试过的所有方式好像都是不行的,阿粉就直接重启了自己的服务器,这样临时的变量就不存在了!

说真的,Shell脚本的流程控制数一般才是yyds,为什么这么说,因为你在写大部分的脚本的时候,流程控制的地方永远是最多的,判断,选择,等等一系列的函数,当时熟练使用的时候,就发现这东西确实很有意思。

我们先说最简单的 if else 这也是我们最经常使用的判断,在写 Shell 脚本的时候,就不像我们的 Java 中直接写

Xshell 中的语法就不是这个样子的, Xshell 语法:

末尾的 fi 就是 if 倒过来拼写,我们可以写一个 if 的脚本试一下这个流程能否理解。

这里申明一下,

我们在上面这段脚本中写就是内容就是,我们给脚本传入一个值,然后比对这个值和2的大小关系,然后输出我们指定的内容。

运行后就能看到

$1 表示我们给 Shell 脚本输入的第一个参数, $0 就是你写的shell脚本本身的名字,$2 是我们给 Shell 脚本传的第二个参数

大家在部署某些项目的时候,是不是启动命令就很简洁,就是 sh service.sh start 类似这种的,那我们来看看一般这种是怎么写的,这就用到了另外一块的内容,和 if 类似,在 Java 中也有,那就是 Case .

我们先来看看 Case 的语法,

case ... esac 实际上就和 Java 中的 Case 是非常相似的,case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令. esac 是一个结束的标志。

光说不练,假把式,我们来搞一下试试写一个脚本来搞一下。就用我们刚才说的 sh servic.sh start 来进行测试。

我们来看看运行结果

那么这段 Shell 脚本是什么意思呢?其实很简单,匹配我们传入的第一个字符,和 start 还有 stop 进行比较,如果匹配上之后,输出命令,最后退出即可。

是不是感觉没有那么复杂了呢?

说到流程控制,那么肯定不能不说 for , 毕竟 for 循环在 Java 中那可是重头戏。

我们先看他的格式

那么我们有没有说像是 Java 中那种 for 循环一样的方式呢?比如说这个 for ((i=1; i<=j; i++))

实际上也是支持这种的,我们来写一个试试。

执行一下看看

既然有 for 那是不是就有 while 呢?是的,没错,确实是有 while ,也是循环的意思,但是写法有略微不一样的地方

我们来举个尝试打印九九乘法表来看一下

是不是也挺简单的?

其实 Shell 脚本的编写一般都是在实际应用中提升,单纯的写测试脚本,也是可以让自己对知识的掌握比较充分,而我们一般都是写一些比较简单的脚本,复杂的不是还有运维么?

❷ 如何使用shell脚本每天自动备份mysql数据库

mysql备份用自带的备份工具mysqlmp
每天自动执行用cron工具,把mysql的备份命令放在贺空袜亏碰.sh文件里面
.sh文件放在禅激/etc/cron.daily目录,就会每天自动执行了。

❸ shell脚本telnet登陆交换机备份配置

#!/bin/bash
export datetime='date +%Y%m%d'
export BAKTIME=`date +%Y%m%d%H%M%S`
export user="admin"
export password="admin"
export back="dis cu"
export BAK_DIR=/back/h3c

for i in $(cat ip_file)
do
{
echo $user;
sleep 1;
echo $password;
sleep 1;
echo $back;
sleep 1;
echo " ";
sleep 5;
}|telnet $i > $BAK_DIR/$i-$BAKTIME.log
done
mkdir $BAK_DIR/H3C_$datetime
mv *-$datetime* H3C_$datetime
注释
####################################
export BAKTIME=`date +%Y%m%d%H%M%S` 输出系统时间
export user="admin" 此用户为交换机、路由器用户名
export password="admin" 此密码为交换机、路由器密码
export back="dis cu" 此唯埋兄命令为查看H3C交换机配置
export BAK_DIR=/home/erp/back/h3c 此目录是linux服务器备份交换机、路由器的存放目录
cat ip_file 此命令意思是查看ip_file文件中的内容,逐行查看
####################################
ip_file 文件添加交换机IP(注意:不要加双引号, 文件与脚本在指袭同一目录下液没存放)
#以下为交换机、路由器IP地址
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.7

❹ 编写一个shell脚本每天16:30备份mysql数据并压缩打包(打包文件按照当天日期命名)放到/root/data下

#!/bin/bash

date=$(date-d'+0days''+%Y-%m-%d')#声明一个变量,并赋值当天日期
cd/root/data#进入目录
mkdir$date#创建目录

mysqlmp-uusername-ppassworddb_name>$date"db_name.sql"#数据库备份,修改用户名密码,还有要备份数据库

tar-zcf$date".tar.gz"$date#压缩打包
rm-rf$date#删除源数据

保存为bak.sh,每天16:30备份定时任务,没有crontab命令:yum install vixie-cron

chmod +x /.../bak.sh

crontab -e

30 16 * * * /.../bak.sh

❺ 设计一个shell脚本程序,要求有如下功能: 实现自动备份功能和清理备份等

#!/bin/bash
TIME=`date+%Y%m%d|cut-b3-8`
#question1
tar-zcvf/home/bak/VAR_$TIME_BAK.gzip/var
#question2
ls蚂基拆-l/var>>/home/bak/VAR_$TIME_BAK.log
#question3
find/home/bak-name'*gzip'-mtime+1|xargsrm-rf

脚本名字闷枣backup.sh,放到/root下,然后用root创建cronjob

0 12 * * * /root/backup.sh

#question 4 (以redhat为例)

echo " /root/backup.sh " >> /etc/rc.local

#question 5

把下列代码写入cronjob中

#!/bin/bash
TIME=`date+%Y"/"%m"/"%d""%H":"%m`
if[-f/home/shell.log]
then
echo"$TIMErunning">/home/tmp.log
cat/home/shell.log>>/home/tmp.log
mv锋掘/home/tmp.log/home/shell.log
else
touch/home/shell.log
fi

脚本名字status.sh,放到/root下 (写的有点小问题,功能执行没问题)

0 * * * * /root/status.sh

❻ shell脚本怎么实现日志备份到本地Linux系统

把日志打包,压缩,拉取到本地

阅读全文

与shell编程实战系统备份脚本相关的资料

热点内容
欧姆龙plc编程第36讲 浏览:907
我的世界如何将一个服务器弄崩 浏览:6
php网站访问量代码 浏览:431
怠速压缩机咔咔响 浏览:176
怎么才能修改APP中的数据 浏览:688
哪里有抢单的app 浏览:462
算法概率题 浏览:465
长方形拉伸的命令 浏览:279
python代码函数编程技术 浏览:194
java正则式 浏览:429
外包程序员好进吗 浏览:384
云服务器服务模型架构 浏览:901
删文件夹什么指令 浏览:509
极速抖音已加密怎么办 浏览:603
matlab拉格朗日算法框图 浏览:430
华为公司计算机视觉算法顾问 浏览:254
夏老师讲的单片机 浏览:298
在编程中如何将图片放大 浏览:163
appstore怎么看是否付费 浏览:603
程序员和硕士 浏览:951