练习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命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做练习:

  1. 简单

假设有一个大的分区/data/,每次删除文件或者目录之前,都要先在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201703271012/,然后把所有删除的文件同步到该目录下面,可以使用rsync -R 把文件路径一起同步

  1. 复杂

不知道哪个分区有剩余空间,在删除之前先计算要删除的文件或者目录大小,然后对比系统的磁盘空间,如果够则按照上面的规则创建隐藏目录,并备份,如果没有足够空间,要提醒用户没有足够
的空间备份并提示是否放弃备份,如果用户选择y,则直接删除文件或者目录,如果选择n,则提示未删除,然后退出脚本。

  1. 简单
    #!/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相关推荐

  1. SHELL训练营--day5__shell脚本(1)

    shell脚本意义 shell是一种脚本语言,具备计算机语言的基本特点:逻辑判断.循环.自定义函数等. shell脚本 主要使用 linux系统的命令,来实现特定目的. 可用于自动化运维,提长运维效率 ...

  2. shell训练营Day18

    练习31 提示用户输入网卡的名字,然后我们用脚本输出网卡的ip,需要考虑下面问题: 输入的字符不符合网卡名字规范,怎么应对. 名字符合规范,但是根本就没有这个网卡又怎么应对. #!/bin/bash ...

  3. shell训练营Day27

    练习76 linux系统中,目录/root/下有一个文件ip-pwd.ini,内容如下: 10.111.11.1,root,xyxyxy 10.111.11.2,root,xzxzxz 10.111. ...

  4. shell训练营Day13

    练习六: 写一个脚本,判断本机的80端口(假如服务为httpd)是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务, 并发邮件通知你自己.脚本写好后,可以每一分钟执行一次 ...

  5. 代码随想录训练营day31

    目录 题目一:分发饼干 解法一: 解法二: 题目二:摆动序列 题目三:最大子序和 解法一: 解法二: 题目一:分发饼干 力扣题目链接 题目描述: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但 ...

  6. shell实战训练营Day14

    输入数字执行命令 输入1执行 date命令 输入2执行 ls命令 可以使用case判断 #!/bin/bash echo "cmd manu 1 date 2 ls 3 pwd" ...

  7. shell实战训练营Day1

    1.shell基础介绍 shell是一个命令解释器.人机交互 有特定的语法 for if while 等 centos7中默认shell为bash,但也有ksh,zsh等shell 2.命令历史 hi ...

  8. shell实战训练营Day2

    6.管道符号与作业控制 管道符 | 把左边命令输出结果交给右边执行. cat /etc/passwd | grep -i root 列出passwd中包含 root的行. 作业控制 Ctrl+ z 暂 ...

  9. 渗透操作系统——【靶场实战训练营】快来看看有没有你需要的

    基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终拿下机器root权限的全流程.不只讲解怎么做,并且讲解为什么这样做,教给你别的地 ...

最新文章

  1. python中adb连接手机_Python脚本利用adb进行手机控制的方法
  2. delphi 登录界面 主窗体 切换_winform项目——仿QQ即时通讯程序06:主界面交互逻辑...
  3. 用Eclipse进行远程Debug代码
  4. poj 1065 Wooden Sticks
  5. 重载和const形参
  6. Zabbix3.0 安装Graphtree
  7. iOS 14不跳票 6月见!苹果WWDC 2020将在线上举办:33年来首次
  8. 大白话讲高项高频知识点(在线更新)
  9. XCode使用自带SVN,SVN命令
  10. java集合类的学习总结一
  11. 手机查看IGES,STP,STEP格式3D模型免费APP推荐-CAD Assistant
  12. 构建全渠道零售平台及营销场景解读
  13. vue开发项目微信公众号授权支付开发
  14. golang压缩图片
  15. 微信小程序 mark用法
  16. 恩智浦+飞思卡尔后你需要知道的十件事
  17. 计算机常用软件实验报告,计算机常用应用软件的安装和使用实验报告.doc
  18. 甲骨文发布2018第一季度财报 总收入92亿美元
  19. Docker部署Oracle11g
  20. Python 编码规范(pep8)

热门文章

  1. python简单目标检测代码_Python Opencv实现单目标检测的示例代码
  2. 动感英语笔记_【共同战“疫”】(一)滨海新区大港西苑小学英语教师团队
  3. python列表推导式实现从1加到100_python之生成器和列表推导式
  4. linux服务器重启后阵列卡分区没了,服务器数据丢失了怎么恢复/分区丢失恢复教程...
  5. 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
  6. 【NLP-语义匹配】详解深度语义匹配模型DSSM
  7. 【AI产品】如何让Google的AI给你捕捉最美的自拍瞬间
  8. 【技术综述】如何Finetune一个小网络到移动端(时空性能分析篇)
  9. 中国血液制品行业供给预测与投资风险分析报告2022版
  10. 制作多域名(SAN/UCC)CSR(证书请求文件)