您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > shell-100题
Shell练习题shell习题-监控web可用性写一个shell脚本,通过curl-I返回的状态码来判定所访问的网站是否正常。比如,当状态码为200时,才算正常。参考答案:#/bin/bashurl==`curl-I$url2/dev/null|head-1|awk'{print$2}'`if[$sta!=200]thenpython/usr/local/sbin/mail.pyxxx@qq.com$urldown.$urldownfishell习题-监控网卡1每10分钟检测一次指定网卡的流量2如果流量为0,则重启网卡参考答案:#!/bin/bashLANG=enn1=`sar-nDEV160|grepeth0|grep-iaverage|awk'{print$5}'|sed's/\.//g'`n2=`sar-nDEV160|grepeth0|grep-iaverage|awk'{print$6}'|sed's/\.//g'`if[$n1==000]&&[$n2==000]thenifdowneth0ifupeth0fi然后写个cron,10分钟执行一次shell习题-三行变一行比如1.txt内容1234567处理后应该是1234567参考答案:sed'N;N;s/\n//g'1.txtshell习题-检查服务先判断是否安装http和mysql,没有安装进行安装,安装了检查是否启动服务,若没有启动则需要启动服务。说明:操作系统为centos6,httpd和mysql全部为rpm包安装。参考答案:#!/bin/bashif_install(){n=`rpm-qa|grep-cw$1`if[$n-eq0]thenecho$1notinstall.yuminstall-y$1elseecho$1installed.fi}if_installhttpdif_installmysql-serverchk_ser(){p_n=`ps-C$1--no-heading|wc-l`if[$p_n-eq0]thenecho$1notstart./etc/init.d/$1startelseecho$1started.fi}chk_httpdchk_mysqldshell习题-判断日期是否合法用shell脚本判断输入的日期是否合法。就是判断日期是都是真实的日期,比如20170110就是合法日期,20171332就不合法。参考答案:#!/bin/bash#checkdateif[$#-ne1]||[${#1}-ne8]thenechoUsage:bash$0yyyymmddexit1fidatem=$1year=${datem:0:4}month=${datem:4:2}day=${datem:6:2}ifecho$day|grep-q'^0'thenday=`echo$day|sed's/^0//'`fiifcal$month$year/dev/null2/dev/nullthendaym=`cal$month$year|egrep-v$year|Su|grep-w$day`if[$daym!=]thenechookelseechoError:Pleaseinputawrightdate.exit1fielseechoError:Pleaseinputawrightdate.exit1fishell习题-3位随机数字写一个脚本产生随机3位的数字,并且可以根据用户的输入参数来判断输出几组。比如,脚本名字为number3.sh。执行方法:bashnumber3.sh直接产生一组3位数字。bashnumber3.sh10插上10组3位数字。思路:可以使用echo$RANDOM获取一个随机数字,然后再除以10,取余获取0-9随机数字,三次运算获得一组。参考答案#!/bin/bashget_a_num(){n=$[$RANDOM%10]echo$n}get_numbers(){foriin123;doa[$i]=`get_a_num`doneecho${a[@]}}if[-n$1];thenm=`echo$1|sed's/[0-9]//g'`if[-n$m];thenechoUseagebash$0n,nisanumber,example:bash$05exitelseforiin`seq1$1`doget_numbersdonefielseget_numbersfishell习题-shell的getops写一个getinterface.sh脚本可以接受选项[i,I],完成下面任务:1)使用一下形式:getinterface.sh[-iinterface|-Iip]2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项时,显示其指定ip所属的网卡。例:shgetinterface.sh-ieth0shgetinterface.sh-I192.168.0.13)当用户使用除[-i|-I]选项时,显示[-iinterface|-Iip]此信息。4)当用户指定信息不符合时,显示错误。(比如指定的eth0没有,而是eth1时)参考答案:#!/bin/bashipadd|awk-F:'$1~/^[1-9]/{print$2}'|sed's///g'/tmp/eths.txt[-f/tmp/eth_ip.log]&&rm-f/tmp/eth_ip.logforethin`cat/tmp/eths.txt`doip=`ipadd|grep-A2:$eth|grepinet|awk'{print$2}'|cut-d'/'-f1`echo$eth:$ip/tmp/eth_ip.logdoneuseage(){echoPleaseuseage:$0-i网卡名字or$0-Iip地址}wrong_eth(){if!awk-F':''{print$1}'/tmp/eth_ip.log|grep-qw^$1$thenecho请指定正确的网卡名字exitfi}wrong_ip(){if!awk-F':''{print$2}'/tmp/eth_ip.log|grep-qw^$1$thenecho请指定正确的ip地址exitfi}if[$#-ne2]thenuseageexitficase$1in-i)wrong_eth$2grep-w$2/tmp/eth_ip.log|awk-F':''{print$2}';;-I)wrong_ip$2grep-w$2/tmp/eth_ip.log|awk-F':''{print$1}';;*)useageexitesacshell习题-更改后缀名1编写一个名为chname的程序,将当前目录下所有的.txt文件更名为.doc文件。2编写一个名为chuser的程序,执行中每隔5分钟检查指定的用户是否登录系统,用户名从命令行输入;如果指定的用户已经登录,则显示相关信息。参考答案:1.#!/bin/bashfind.-typef-name*.txt/tmp/txt.listforfin`cat/tmp/txt.list`don=`echo$f|sed-r's/(.*)\.txt/\1/'`echomv$f$n.docdone2.#!/bin/bashread-pPleaseinputtheusername:userwhile:doifwho|grep-qw$userthenecho$userlogin.elseecho$usernotlogin.fisleep300doneshell习题-判断pid是否一致先普及一小段知识,我们用psaux可以查看到进程的PID,而每个PID都会在/proc内产生。如果查看到的pid而proc内是没有的,则是进程被人修改了,这就代表你的系统很有可能已经被入侵过了。请大家用上面知识编写一个shell,定期检查下自己的系统是否被人入侵过。参考答案:#!/bin/bashpsaux|awk'/[0-9]/{print$2}'|whilereadpiddoresult=`find/proc/-maxdepth1-typed-name$pid`if[-z$result];thenecho$pidabnormal!fidoneshell习题-判断文件存在1编写一个名为iffile程序,它执行时判断/bin目录下date文件是否存在?2编写一个名为greet的问候程序,它执行时能根据系统当前的时间向用户输出问候信息。设从半夜到中午为早晨,中午到下午六点为下午,下午六点到半夜为晚上。参考答案:1.#!/bin/bashif[-f/bin/date]thenecho/bin/datefileexist.elseecho/bin/datenotexist.fi2.#!/bin/bashh=`date+%H`if[$h-ge0]&&[$h-lt12]thenechoGoodmorning.elif[$h-ge12]&&[$h-lt18]thenechoGoodafternoon.elseechoGoodevening.fishell习题-判断用户登录1编写一个名为ifuser的程序,它执行时带用户名作为命令行参数,判断该用户是否已经在系统中登录,并给出相关信息。2编写一个名为menu的程序,实现简单的弹出式菜单功能,用户能根据显示的菜单项从键盘选择执行对应的命令。参考答案:1.#!/bin/bashread-pPleaseinputtheusername:userifwho|grep-qw$userthenecho$userisonline.elseecho$usernotonline.fi2.#!/bin/bashfunctionmessage(){echo0.wecho1.lsecho2.quitread-pPleaseinputparameter:Par}messagewhile[$Par-ne'2'];docase$Parin0)w;;1)ls;;2)exit;;*)echoUnkowncommand;;esacmessagedoneshell习题-格式化输出输入一串随机数字,然后按千分位输出。比如输入数字串为“123456789”,输出为123,456,789参考答案:#!/bin/bashread-p输入一串数字:numv=`echo$num|sed's/[0-9]//g'`if[-n$v]thenecho请输入纯数字.exitfilength=${#num}len=0sum=''foriin$(seq1$length)dolen=$[$len+1]if[[$len==3]]thensum=','${num:$[0-$i]:1}$sumlen=0elsesum=${num:$[0-$i]:1}$sumfidoneif[[-n$(echo$sum|grep'^,')]]thenecho${sum:1}elseecho$sumfi上面这个答案比较复杂,下面再来一个sed的#!/bin/bashread-p输入一串数字:numv=`echo$num|sed's/[0-9]//g'`if[-n$v]thenecho请输入纯数字.exitfiecho$num|sed-r'{:number;s/([0-9]+)([0-9]{3})/\1,\2/;tnumber}'shell习题-检查错误写一个shell脚本,检查指定的shell脚本是否有语法错误,若有错误,首先显示错误信息,然后提示用户输入q或者Q退出脚本,输入其他内容则直接用vim打开该shell脚本。提醒:检查shell脚本有没有语法错误的命令是sh-nxxx.sh参考答案:#!/bin/bashsh-n$12/tmp/errif[$?-eq0]thenechoThescriptisOK.elsecat/tmp/errread-pPleaseinpuptQ/qtoexit,or
本文标题:shell-100题
链接地址:https://www.777doc.com/doc-1904937 .html