shell训练营Day31
练习96
需求背景:
领导要求小明备份数据库服务器里面的100个库(数据量在几十到几百G),需要以最快的时间完成(5小时内),并且不能影响服务器性能。
#!/bin/bash
##假设100个库的库名、host、port以及配置文件路径存到了一个文件里,文件名字为/tmp/databases.list
##格式:db1 10.10.10.2 3308 /data/mysql/db1/my.cnf
##备份数据库使用xtrabackup(由于涉及到myisam,命令为inoobackupex)
exec &> /tmp/mysql_bak.log
if ! which innobackupex &>/dev/nll
then
echo "安装xtrabackup工具"
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm && \
yum install -y percona-xtrabackup-24
if [ $? -ne 0 ]
then
echo "安装xtrabackup工具出错,请检查。"
exit 1
fi
fi
bakdir=/data/backup/mysql
bakuser=vyNctM
bakpass=99omeaBHh
function bak_data {
db_name=$1
db_host=$2
db_port=$3
cnf=$4
[ -d $bakdir/$db_name ] || mkdir -p $bakdir/$db_name
innobackupex --defaults-file=$4 --host=$2 --port=$3 --user=$bakuser --password=$bakpass $bakdir/$1
if [ $? -ne 0 ]
then
echo "备份数据库$1出现问题。"
fi
}
fifofile=/tmp/$$
mkfifo $fifofile
exec 1000<>$fifofile
thread=10
for ((i=0;i<$thread;i++))
do
echo >&1000
done
cat /tmp/databases.list | while read line
do
read -u1000
{
bak_data echo $line
echo >&1000
} &
done
wait
exec 1000>&-
rm -f $fifofile
练习97
之前咱们打印过正方形,也打印过乘法口诀,那今天来打印一个三角形(正三角形,元素用*表示)。
#!/bin/bash
while true
do
read -p "please input the lenth: " n
if [ -z $n ]
then
echo "要输入一个数字。"
continue
else
n1=echo $n|sed 's/[0-9]//g'
if [ -n "$n1" ]
then
echo "你输入的不是纯数字,重新输入。"
continue
else
break
fi
fi
done
for i in seq 1 $n
do
j=$[$n-$i]
for m in seq $j
do
echo -n " "
done
for p in `seq 1 $i`
doecho -n "* "
done
echo
done
练习98
利用你学过的知识点,想办法根据要求截取出字符。
字符串var=http://www.aaa.com/root/123.htm
1.取出www.aaa.com/root/123.htm
2.取出123.htm
3.取出http://www.aaa.com/root
4.取出http:
5.取出http://
6.取出root/123.htm
7.取出123
#!/bin/bash
var=http://www.aaa.com/root/123.htm
echo "1.取出www.aaa.com/root/123.htm"
echo $var |awk -F '//' '{print $2}'
echo "2.取出123.htm"
echo $var |awk -F '/' '{print $5}'
echo "3.取出http://www.aaa.com/root"
echo $var |sed 's#/123.htm##'
echo "4.取出http:"
echo $var |awk -F '//' '{print $1}'
echo "5.取出http://"
echo $var |awk -F 'www' '{print $1}'
echo "6.取出root/123.htm"
echo $var |awk -F 'com/' '{print $2}'
echo $var |awk -F '/' '{print $4"/"$5}'
echo "7.取出123"
echo $var |sed 's/[^0-9]//g'
练习99
请把下面的字符串:
zhangsan
y97JbzPru
lisi
5JhvCls6q
xiaowang
Nnr8qt2Ma
laoma
iqMtvC02y
zhaosi
9fxrb4sJD
改为如下:
zhangsan:y97JbzPru
lisi:5JhvCls6q
xiaowang:Nnr8qt2Ma
laoma:iqMtvC02y
zhaosi:9fxrb4sJD
#!/bin/bash
n=wc -l test3.txt|awk '{print $1}'
n2=$[$n/2]
for i in seq 1 $n2
do
i2=$[$i*2]
j=$[$i2-1]
l1=sed -n "$i2"p test3.txt
l2=sed -n "$j"p test3.txt
echo $l2:$l1
done
练习100
linux系统的rm命令太危险,一不小心就会删除掉系统文件。 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做练习:
- 简单
假设有一个大的分区/data/,每次删除文件或者目录之前,都要先在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201703271012/,然后把所有删除的文件同步到该目录下面,可以使用rsync -R 把文件路径一起同步
- 复杂
不知道哪个分区有剩余空间,在删除之前先计算要删除的文件或者目录大小,然后对比系统的磁盘空间,如果够则按照上面的规则创建隐藏目录,并备份,如果没有足够空间,要提醒用户没有足够
的空间备份并提示是否放弃备份,如果用户选择y,则直接删除文件或者目录,如果选择n,则提示未删除,然后退出脚本。
- 简单
#!/bin/bash
filename=$1
big_filesystem=/data/
if [ ! -e $1 ]
then
echo "$1 不存在,请使用绝对路径"
exit
fi
d=date +%Y%m%d%H%M
read -p "Are U sure delete the file or directory $1? y|n: " c
case $c in
y|Y)
mkdir -p $big_filesystem/.$d && rsync -aR $1 $big_filesystem/.$d/$1 && /bin/rm -rf $1
;;
n|N)
exit 0
;;
*)
echo "Please input 'y' or 'n'."
;;
esac
2.复杂
#!/bin/bash
filename=$1
if [ ! -e $1 ]
then
echo "$1 不存在,请使用绝对路径"
exit
fi
d=date +%Y%m%d%H%M
f_size=du -sk $1|awk '{print $1}'
disk_size=LANG=en; df -k |grep -vi filesystem|awk '{print $4}' |sort -n |tail -n1
big_filesystem=LANG=en; df -k |grep -vi filesystem |sort -n -k4 |tail -n1 |awk '{print $NF}'
if [ $f_size -lt $disk_size ]
then
read -p "Are U sure delete the file or directory: $1? y|n: " c
case $c in
y|Y)
mkdir -p $big_filesystem/.$d && rsync -aR $1 $big_filesystem/.$d/$1 && /bin/rm -rf $1
;;
n|N)
exit 0
;;
)
echo "Please input 'y' or 'n'."
;;
esac
else
echo "The disk size is not enough to backup the files $1."
read -p "Do you want to delete $1? y|n: " c
case $c in
y|Y)
echo "It will delete $1 after 5 seconds whitout backup."
for i in seq 1 5
; do echo -ne ". "; sleep 1;done
echo
/bin/rm -rf $1
;;
n|N)
echo "It will not delete $1."
exit 0
;;
)
echo "Please input 'y' or 'n'."
;;
esac
fi
转载于:https://blog.51cto.com/12898947/2347450
shell训练营Day31相关推荐
- SHELL训练营--day5__shell脚本(1)
shell脚本意义 shell是一种脚本语言,具备计算机语言的基本特点:逻辑判断.循环.自定义函数等. shell脚本 主要使用 linux系统的命令,来实现特定目的. 可用于自动化运维,提长运维效率 ...
- shell训练营Day18
练习31 提示用户输入网卡的名字,然后我们用脚本输出网卡的ip,需要考虑下面问题: 输入的字符不符合网卡名字规范,怎么应对. 名字符合规范,但是根本就没有这个网卡又怎么应对. #!/bin/bash ...
- shell训练营Day27
练习76 linux系统中,目录/root/下有一个文件ip-pwd.ini,内容如下: 10.111.11.1,root,xyxyxy 10.111.11.2,root,xzxzxz 10.111. ...
- shell训练营Day13
练习六: 写一个脚本,判断本机的80端口(假如服务为httpd)是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务, 并发邮件通知你自己.脚本写好后,可以每一分钟执行一次 ...
- 代码随想录训练营day31
目录 题目一:分发饼干 解法一: 解法二: 题目二:摆动序列 题目三:最大子序和 解法一: 解法二: 题目一:分发饼干 力扣题目链接 题目描述: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但 ...
- shell实战训练营Day14
输入数字执行命令 输入1执行 date命令 输入2执行 ls命令 可以使用case判断 #!/bin/bash echo "cmd manu 1 date 2 ls 3 pwd" ...
- shell实战训练营Day1
1.shell基础介绍 shell是一个命令解释器.人机交互 有特定的语法 for if while 等 centos7中默认shell为bash,但也有ksh,zsh等shell 2.命令历史 hi ...
- shell实战训练营Day2
6.管道符号与作业控制 管道符 | 把左边命令输出结果交给右边执行. cat /etc/passwd | grep -i root 列出passwd中包含 root的行. 作业控制 Ctrl+ z 暂 ...
- 渗透操作系统——【靶场实战训练营】快来看看有没有你需要的
基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终拿下机器root权限的全流程.不只讲解怎么做,并且讲解为什么这样做,教给你别的地 ...
最新文章
- python中adb连接手机_Python脚本利用adb进行手机控制的方法
- delphi 登录界面 主窗体 切换_winform项目——仿QQ即时通讯程序06:主界面交互逻辑...
- 用Eclipse进行远程Debug代码
- poj 1065 Wooden Sticks
- 重载和const形参
- Zabbix3.0 安装Graphtree
- iOS 14不跳票 6月见!苹果WWDC 2020将在线上举办:33年来首次
- 大白话讲高项高频知识点(在线更新)
- XCode使用自带SVN,SVN命令
- java集合类的学习总结一
- 手机查看IGES,STP,STEP格式3D模型免费APP推荐-CAD Assistant
- 构建全渠道零售平台及营销场景解读
- vue开发项目微信公众号授权支付开发
- golang压缩图片
- 微信小程序 mark用法
- 恩智浦+飞思卡尔后你需要知道的十件事
- 计算机常用软件实验报告,计算机常用应用软件的安装和使用实验报告.doc
- 甲骨文发布2018第一季度财报 总收入92亿美元
- Docker部署Oracle11g
- Python 编码规范(pep8)
热门文章
- python简单目标检测代码_Python Opencv实现单目标检测的示例代码
- 动感英语笔记_【共同战“疫”】(一)滨海新区大港西苑小学英语教师团队
- python列表推导式实现从1加到100_python之生成器和列表推导式
- linux服务器重启后阵列卡分区没了,服务器数据丢失了怎么恢复/分区丢失恢复教程...
- 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
- 【NLP-语义匹配】详解深度语义匹配模型DSSM
- 【AI产品】如何让Google的AI给你捕捉最美的自拍瞬间
- 【技术综述】如何Finetune一个小网络到移动端(时空性能分析篇)
- 中国血液制品行业供给预测与投资风险分析报告2022版
- 制作多域名(SAN/UCC)CSR(证书请求文件)