shell脚本练习题(编程题)。
1.shell开发运维管理工具。
要求:用户交互,当用户输入菜单号时,打印相关内容。
菜单
磁盘分区
CPU负载
剩余内存
退出
输入: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脚本练习题(编程题)。相关推荐
- shell 脚本练习 | 「题霸」面试必考真题【shell篇】题解
写在前面: 每道shell脚本练习题都可以使用while.for.do等循环配合read,printf的方式解题,通过这种编程式的思维解题(类似C语言,通过变量与函数解题).而shell中本身就提供了 ...
- linux 脚本编写 -eq,关于shell脚本基础编程第四篇
shell脚本基础编程第四篇 本章主要内容:函数 函数 function: function 名称 { 命令 ; } 或 name () { 命令 ; } 定义 shell 函数. 创建一个以 NAM ...
- Linux shell脚本练习题汇总
Linux shell脚本练习题汇总 编写脚本文件example1.sh,存放在/home/cauc/scripts目录下.脚本功能为:查找某文件是否存在(以参数形式),若存在,则将其权限设置为用户主 ...
- shell脚本经典10题
shell脚本练习题: 文章目录 shell脚本练习题: 1.从1加到100的和: 2.shell脚本自动搭建本地yum仓库: 3.shell脚本自动化分区,格式化和挂载: 4.shell脚本查看系统 ...
- 标杆徐linux云计算视频,标杆徐2018 Linux自动化运维系列④: Shell脚本自动化编程实战...
2019年录制SHell新课地址 贴切企业脚本编写思路讲解,带你玩Shell脚本编程实战. 本套课程从实际项目案例出发,近100个Shell实例讲解,由浅入深,循序渐进,带你玩转Shell编程的方方面 ...
- Linux shell脚本各种烧脑题编写
第一列达到100的时候 第二列数字从100向1 处理 第二列数字到50 第三列数字从100递增 第二列数字为0时不显示 第四列数字从1递增 ============================== ...
- Andrew Ng's deeplearning Course 第1课、第2课、第3课、第4课、第5课课后练习题/编程题
吴恩达深度学习deeplearning第一课课后测验及编程作业(含答案): http://download.csdn.net/download/u012867545/10171710 吴恩达深度学习d ...
- linux Shell(脚本)编程入门实例讲解详解
linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...
- shell脚本编程for循环求阶乘_shell脚本编程(完结版).pdf
shell脚本编程(完结版) Shell 脚本编程学习笔记 2013 年 5 月 2 日 追风~忆梦 如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦东山群共同讨论 1 Shell ...
- Linux下eclipse中shell脚本编程环境的搭建
注意:本文所用到的linux发行版是fedora 15.如果用fedora 15以上的版本可能会有问题.至于解决方案或者是搭建方法我会尽量抽出时间写一篇新的博客... 本文主要是介绍在linux平台下 ...
最新文章
- [转]Android敏捷开发指南
- 独家 | 一文带你熟悉贝叶斯统计
- python英语单词库-python-data-英语单词
- 在latex中导入endnote中的参考文献——简明步骤
- EV3 直接命令 - 第 2 课 让你的 EV3 做点什么
- Jeecg-Boot 快速开发平台,前后端分离—开发环境搭建
- php发布文章时 未定义索引,php – 上传文件时未定义的索引
- JVM内存管理及垃圾回收机制
- Excel使用公式截取字符串
- 【实用工具系列之爬虫】python实现爬取代理IP(防 ‘反爬虫’)
- 两点告诉您品牌控价(管控低价乱价)的重要性
- 人脸识别撞脸名画_人脸识别趣谈——从韩国女星的撞脸说起
- FTP上传下载端口号
- Android Studio代码迁移问题小汇总
- QQ出现大规模盗号,为什么会这样?就没有解决方法了吗?
- 高考投档计算机检索,高考志愿投档
- 基于java失物招领系统
- 学计算机语言的最佳年龄,孩子学编程最佳年龄是几岁
- 如何保证路缘石滑模机作业质量的几个原则
- 天池读书会,邱锡鹏教授等一众大咖和你一起读书