1.shell开发运维管理工具。

要求:用户交互,当用户输入菜单号时,打印相关内容。

菜单

  1. 磁盘分区

  2. CPU负载

  3. 剩余内存

  4. 退出

输入:1

输出:(主机名,系统版本,分区情况)

​ hostname:

​ system:系统版本

​ ---------分区一-----------(分区变量输出)

​ path:分区一

​ size:大小

​ file_os:分区文件系统类型

​ mount_on:分区挂载点

​ ----------分区二----------

​ path:分区二

​ size:大小

​ file_os:分区文件系统类型

​ mount_on:分区挂载点

输入:2

输出:

1分钟平均负载:

5分钟平均负载:

15分钟平均负载:

输入:3

输出:

目前可用内存:

可用Swap分区:

输入:4

输出:

Bey…

#!/bin/bash
while true
do
#格式化输出以下菜单
cat <<EOF        -------------------菜单----------------------              1.查看磁盘分区              --              2.CPU负载                   --              3.剩余内存                  --              4.退出                      -  --------------------------------------------
EOF
#接受用户输入的一个值
read -p "请输入你要执行的操作:>>>" num
#实现第一个功能:查看磁盘分区
PART(){               echo "hostname:$HOSTNAME"                            #获取主机名echo "system: `cat /etc/redhat-release`"             #获取系统内核版本#定义数组,获取磁盘分区放入其中。array1=(`lsblk -l |awk '/sd[a-z][0-9]/{print $1}'`)  #磁盘名array2=(`lsblk -l |awk '/sd[a-z][0-9]/{print $4}'`)  #大小array3=(`lsblk -l |awk '/sd[a-z][0-9]/{print $6}'`)  #类型array4=(`lsblk -l |awk '/sd[a-z][0-9]/{print $7}'`)  #挂载点#遍历数组num=`echo $((${#array1[@]}-1))`  #获取数组长度-1的值,给num(这里是3)for i in `seq 0 $num`            #i:0-3do#循环输出数组1中0到3位置值
cat <<EOF---------${array1[$i]}-----------path: ${array1[$i]}size: ${array2[$i]}file_os: ${array3[$i]}mount_on:${array4[$i]}
EOF
done
}
#实现第二个功能:查看cpu负载
LOADING(){                          #通过uptime命令,和awk,获取平均负载。
uptime |awk -F [:,] '{print "一分钟平均负载:",$(NF-2)"\n""五分钟平均分在:",$(NF-1)"\n""十五分钟平均负载:",$NF}'
}                                  #$NF:从最后一列开始取。
#实现第三个功能:查看内存和swap
MEM(){var=("目前可用内存:" "可用swap分区:")
n=0
for i in `free -h |awk '/^[^[:space:]]/ {print $4}'`    #取出内存和swap,进行遍历
do
echo ${var[$n]} $i            #为满足题目要求,(说明+内容),将说明放入数组依次输出+内容
let n++                       #n从0开始自加,实现数组依次输出。
done
}
#利用case语句捕获用户键入的值。
#模式匹配成功,则执行相应函数。
case $num in1)        PART;;2)LOADING;;3)MEM;;4)exit 0;;*)echo "please input true list..."
esacdone
2.设计一个shell 程序,在每天凌晨压缩打包/etc目录下的所有内容,存放在/root/bak 目录里,且文件名为如下形式yymmdd_etc.tar.gz(yy为年,mm为月,dd为日),该目录保存7天内容;每天凌晨3点增量同步到备份服务器/backup目录下,每周六凌晨3点全量同步到备份服务的/backup目录下;备份服务器/backup下保留一个月的备份文件。Shell程序fileback存放在/usr/bin目录下。(10分)

分析;

1.打包压缩/etc目录下的所有内容,存放在/root/bak 目录

2.本地保存7天

3.增量备份

4.全量备份

5.服务器备份一个月

#!/bin/bash
#定义变量,方便日后修改
back_file_name=`date +%Y%m%d`.tar.gz
back_file_dir=/root/bak
backup_server_user=rsync_backup
backup_server_pass=123456
root_pass=123456
backup_server_IP=192.168.42.159
mail_owner=ljwenjie66@163.com
mail_topic="web data backup"data_tar(){                                           #定义用于压缩函数[ -d $back_file_dir ] || mkdir -p $back_file_dir  #判断/root/bak备份的目录是否存在,不存在就创建。tar -czf $back_file_dir/$back_file_name /etc/*    #将/etc下所有内容进行打包/root/bak/下以时间命名。
}data_trace(){                                         #进行增量备份
rsync -avz $back_file_dir $backup_server_user@$backup_server_IP::backup --password-file=/etc/rsync.password
}       #rsync将本地/root/bak新增的文件备份到备份主机上#--password-file中存储了rsync的密码,避免了交互输入密码data_trace_all(){    #实现全量备份sshpass -p $root_pass scp -o StrictHostKeyChecking=no -rp $back_file_dir/* root@192.168.42.159:/backup
#sshappss -p 123456 scp -rp $back_file_dir root@192.168.42.138:/backup/
}        #sshpass工具实现了自动输入密码#-o StrictHostKeyChecking参数实现了自动输入yes or no,避免了人机交互#利用scp将/root/bak下所有内容进行备份,以root身份备份到对应主机的/backup目录下clean_over_localdata(){   #清除本地7天前的的所有文件find $back_file_dir -mtime +7 -exec rm {} -rf \;
}clean_over_remodata(){ #利用ssh连接备份服务器,将服务器中一个月之前的文件删除sshpass -p 123456 ssh -o StrictHostKeyChecking=no 192.168.42.159 "find /backup/ -mtime +30 -exec rm {} -rf \;"
}case $1 indata_tar)data_tar;;trace_all)data_trace_all;;data_trace)data_trace;;clean_over_localdata)clean_over_lcoaldata;;clean_remodata)clean_over_remodata;;*)echo "please input true paramater..."   #如果输入的不是有效参数,则输出*esac

3.shell实现100台服务器的公钥的批量分发;LLD规划:100台服务器ip为:192.168.42.101-201,root密码:123456。

分析:

1.如何创建秘钥

2.检查与服务器之间的通讯

3.分发秘钥(分发秘钥时,会遇到各种交互问题)

[root@backup ~]# cat keypir.sh
#!/bin/bash
password=123456#创建秘钥对---(ssh-keygen),写入指定文件
CreateKeyPair(){
ssh-keygen -f /root/.ssh/id_rsa -P ""    #-P:创建的秘钥是否设置密码,此处不设置密码。
}#检查100台服务器网络是否畅通
CHECK(){
ping -c 1 192.168.42.$i &>/dev/null
if [ $? -eq 0 ]                          #$? 返回为0时,说明网络畅通
then
return 1
else
return 0
fi
}#分发秘钥
TRACE(){which sshpass &>/dev/null     #确定sshpass是否安装,对方服务器可能没有安装
if [ $? -ne 0 ]               #通过which命令判断sshpass是否安装,安装了echo $?则返回0
then                          #$?不为0时,则说明没有安装
yum install sshpass -y
#sshpass -p $password ssh-copy-id -o StrictKeyHostChecking  192.168.42.$i
sshpass -p $password scp -p -o StrictHostKeyChecking=no /root/.ssh/id_rsa.pub 192.168.42.$i:/tmp/                 #使用sshpass工具和-o参数实现避免交互输入yes和密码#将本地/root/.ssh/id_rsa.pub(生成的秘钥文件),传输到对应服务器上/tmp/目录下,此时不能直接传到/root/.ssh目录下,避免其他机器同样操作覆盖文件。
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.$i "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys"
#ssh连接服务器,将/tmp/下密码文件写如入/root/.ssh/authorized_keys
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.$i "chmod 600 /root/.ssh/authorized_keys"           #修改文件权限
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.$i "rm -rf /tmp/id_rsa.pub"                      #由于是秘钥文件,为了安全起见,用完删除else                                  #如果sshpass工具安装,则直接执行。
#sshpass -p $password ssh-copy-id 192.168.42.$i
sshpass -p $password scp -p -o StrictHostKeyChecking=no /root/.ssh/id_rsa.pub 192.168.42.$i:/tmp/
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.$i "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys"
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.$i "chmod 600 /root/.ssh/authorized_keys"
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.$i "rm -rf /tmp/id_rsa.pub"
fi
}#主函数,调用上方定义的函数,实现功能
MAIN(){
for i in {101..201}
do
CHECK
if [ $? -eq 1 ]                     #调用CHECK检查网络是否畅通,return=1时(畅通)
thenif [ -f /root/.ssh/id_rsa.pub ]  #畅通的话,检查秘钥文件是否存在thenTRACE                         #执行TRACE函数,分发秘钥elseCreateKeyPair                  #创建秘钥TRACE                          #分发秘钥fi
else                  #不通时
echo " 192.168.42.$i is unreachable..."fi
done
}MAIN
有个哥们,每天必须吃一荤一素;用脚本实现搭配的最低消费

1食堂:中国人(人民币)

2食堂:外国人(美元)

汇率,6.798

菜单:
宫保鸡丁(1): 8.6 ¥
豆芽炒青菜(1):5.5 ¥

鱼香肉丝(2):2.5 $
椒盐蘑菇(2):1.9 $

[root@fei-8 tmp]# cat restaurant.sh
#!/bin/bash
#Author:fei
#Blog://blog.csdn.net/wdwangye
#Time:2020-07-01 12:39:45
#Name:restaurant.sh
#Version:V1.0
#Description:This is a test script.a=`cat file |grep \(1\)`                  #将1号食堂的菜放入字符串a中。
array01=(`cat file|grep \(2\)`)           #由于2号食堂的菜价为美元,需要换算为rmb,所以先存入数组。
b=`for i in ${array01[*]};do echo $i;done |awk -F":"  '{print $1":"$2*6.798}' ` #遍历数组,计算2号食堂菜价。for i in $a                     #将一号食堂菜放入,file.txt中
doecho $i >> file.txt
donefor j in $b
doecho $j >> file.txt
donearray02=(`cat file.txt|grep -w 荤`)               #将file.txt中的荤菜放入数组
array03=(`cat file.txt|grep -w 素`)c=`for k in ${array02[*]};do echo $k;done |sort -nt: -k2|head -1`      #遍历数组,排序,取出价格最低的一个
d=`for l in ${array03[*]};do echo $l;done |sort -nt: -k2|head -1`echo "今天要吃的荤菜是:" $c
echo "今天要吃的素菜是:" $drm -rf file.txt       #由于每天菜谱不同,每天用完之后删除

shell脚本练习题(编程题)。相关推荐

  1. shell 脚本练习 | 「题霸」面试必考真题【shell篇】题解

    写在前面: 每道shell脚本练习题都可以使用while.for.do等循环配合read,printf的方式解题,通过这种编程式的思维解题(类似C语言,通过变量与函数解题).而shell中本身就提供了 ...

  2. linux 脚本编写 -eq,关于shell脚本基础编程第四篇

    shell脚本基础编程第四篇 本章主要内容:函数 函数 function: function 名称 { 命令 ; } 或 name () { 命令 ; } 定义 shell 函数. 创建一个以 NAM ...

  3. Linux shell脚本练习题汇总

    Linux shell脚本练习题汇总 编写脚本文件example1.sh,存放在/home/cauc/scripts目录下.脚本功能为:查找某文件是否存在(以参数形式),若存在,则将其权限设置为用户主 ...

  4. shell脚本经典10题

    shell脚本练习题: 文章目录 shell脚本练习题: 1.从1加到100的和: 2.shell脚本自动搭建本地yum仓库: 3.shell脚本自动化分区,格式化和挂载: 4.shell脚本查看系统 ...

  5. 标杆徐linux云计算视频,标杆徐2018 Linux自动化运维系列④: Shell脚本自动化编程实战...

    2019年录制SHell新课地址 贴切企业脚本编写思路讲解,带你玩Shell脚本编程实战. 本套课程从实际项目案例出发,近100个Shell实例讲解,由浅入深,循序渐进,带你玩转Shell编程的方方面 ...

  6. Linux shell脚本各种烧脑题编写

    第一列达到100的时候 第二列数字从100向1 处理 第二列数字到50 第三列数字从100递增 第二列数字为0时不显示 第四列数字从1递增 ============================== ...

  7. Andrew Ng's deeplearning Course 第1课、第2课、第3课、第4课、第5课课后练习题/编程题

    吴恩达深度学习deeplearning第一课课后测验及编程作业(含答案): http://download.csdn.net/download/u012867545/10171710 吴恩达深度学习d ...

  8. linux Shell(脚本)编程入门实例讲解详解

    linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...

  9. shell脚本编程for循环求阶乘_shell脚本编程(完结版).pdf

    shell脚本编程(完结版) Shell 脚本编程学习笔记 2013 年 5 月 2 日 追风~忆梦 如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦东山群共同讨论 1 Shell ...

  10. Linux下eclipse中shell脚本编程环境的搭建

    注意:本文所用到的linux发行版是fedora 15.如果用fedora 15以上的版本可能会有问题.至于解决方案或者是搭建方法我会尽量抽出时间写一篇新的博客... 本文主要是介绍在linux平台下 ...

最新文章

  1. [转]Android敏捷开发指南
  2. 独家 | 一文带你熟悉贝叶斯统计
  3. python英语单词库-python-data-英语单词
  4. 在latex中导入endnote中的参考文献——简明步骤
  5. EV3 直接命令 - 第 2 课 让你的 EV3 做点什么
  6. Jeecg-Boot 快速开发平台,前后端分离—开发环境搭建
  7. php发布文章时 未定义索引,php – 上传文件时未定义的索引
  8. JVM内存管理及垃圾回收机制
  9. Excel使用公式截取字符串
  10. 【实用工具系列之爬虫】python实现爬取代理IP(防 ‘反爬虫’)
  11. 两点告诉您品牌控价(管控低价乱价)的重要性
  12. 人脸识别撞脸名画_人脸识别趣谈——从韩国女星的撞脸说起
  13. FTP上传下载端口号
  14. Android Studio代码迁移问题小汇总
  15. QQ出现大规模盗号,为什么会这样?就没有解决方法了吗?
  16. 高考投档计算机检索,高考志愿投档
  17. 基于java失物招领系统
  18. 学计算机语言的最佳年龄,孩子学编程最佳年龄是几岁
  19. 如何保证路缘石滑模机作业质量的几个原则
  20. 天池读书会,邱锡鹏教授等一众大咖和你一起读书

热门文章

  1. flash player 9 安装错误:您尝试安装的adobeflashplayer版本不是最新版本
  2. 多目标、多阶段、多层次的强化学习合作方法
  3. cad移动时捕捉不到基点,为什么CAD对象捕捉打开了却捕捉不了?
  4. 如何利用github打造博客专属域名
  5. docker安装solr搜索引擎
  6. android 梯形button,阴影与CSS梯形形状按钮
  7. python中format格式化输出总结
  8. 测试场景设计-测试方法论
  9. 2022-2028全球与中国钢琴艺术培训市场现状及未来发展趋势
  10. 2019东北四省 H. Skyscraper (树状数组)