设为首页 收藏本站
查看: 1824|回复: 0

shell学习:几道常见shell习题

[复制链接]
累计签到:15 天
连续签到:1 天
发表于 2015-12-3 15:39:48 | 显示全部楼层 |阅读模式
  1. 编写shell脚本,计算1-100的和;


DSC0000.gif


1 #! /bin/bash
2 sum=0
3 for i in `seq 1 100`; do
4 sum=$[$i+$sum]
5 done
6 echo $sum
计算-00和  
  2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;





1 #! /bin/bash
2 n=0
3 while [ $n -lt "1" ]; do
4 read -p "Please input a number, it must greater than "1":" n
5 done
6
7 sum=0
8 for i in `seq 1 $n`; do
9 sum=$[$i+$sum]
10 done
11 echo $sum
12
13  
判断输入数字  
  3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;





1 #! /bin/bash
2 for f in `ls /root/`; do
3 if [ -d $f ] ; then
4 cp -r $f /tmp/
5 fi
6 done
拷贝目录  
  4. 编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组;





1 #! /bin/bash
2 groupadd users
3 for i in `seq 0 9`; do
4 useradd -g users user_0$i
5 done
6
7 for j in `seq 10 100`; do
8 useradd -g users user_$j
9 done
批量建用户  
  5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;





1 #! /bin/bash
2 awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt
3 sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt
4 awk '$1>10 {print $2}' /tmp/n2.txt
截取文本文件中的字符串  
  6. 编写shell脚本,判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255, 0<n2<255, 0<n3<255, 0<n4<255)。





1 #! /bin/bash
2 checkip()
3 {
4    if echo $1 |egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ; then
5       a=`echo $1 | awk -F. '{print $1}'`
6       b=`echo $1 | awk -F. '{print $2}'`
7       c=`echo $1 | awk -F. '{print $3}'`
8       d=`echo $1 | awk -F. '{print $4}'`
9   
10    fi
11
12 for n in $a $b $c $d; do
13    if [ $n -ge 255 ] || [ $n -le 0 ]; then
14       echo "the number of the IP should less than 255 and greate than 0"
15       return 2
16    else
17       echo "The IP you input is something wrong, the format is like 192.168.100.1"
18       return 1
19    fi
20 done
21
22 }
23
24
25
26 rs=1
27 while [ $rs -gt 0 ]; do
28    read -p "Please input the ip:" ip
29    checkip $ip
30    rs=`echo $?`
31
32 done
33
34 echo "The IP is right!"
35 判断IP地址
判断IP地址  
  7.编写一个脚本,打印任何数的乘法表。如输入3则打印
  1*1=1
  2*1=2 2*2=4
  3*1=3 3*2=6 3*3=9





1 awk -vstr='3' 'BEGIN{for(i=1;i<=str;i++){for(p=1;p<=i;p++)printf p"*"i"="p*i"\t";printf "\n"}}'
打印剩法口决  
8.编写一个脚本,输入自己的生日时间(YYYYMMDD),计算还有多少天多少个小时是自己的生日。






1 read -p "Input your birthday(YYYYmmdd):" date1
2 m=`date --date="$date1" +%m`   
3 d=`date --date="$date1" +%d`   
4 date_now=`date +%s`      
5 y=`date +%Y`            
6
7 birth=`date --date="$y$m$d" +%s`     
8 internal=$(($birth-$date_now))      
9  if [ "$internal" -lt "0" ]; then           
10      birth=`date --date="$(($y+1))$m$d" +%s`      
11      internal=$(($birth-$date_now))      
12  fi
13
14 awk -vinternal=$internal 'BEGIN{d=int(internal/60/60/24);h=int((internal-24*60*60*d)/3600);print "There is : "d" days "h" hours."}'
计算时间  
  9.编写一个脚本,自动将用户主目录下所有小于5KB的文件打包成XX.tar.gz.(提示:用ls,grep,find等命令,文件一般指普通文件)





1 find ~ -size -5 -type f -maxdepth 1|xargs tar zcvpf backup.tar.gz
查找文件  
  10.编写一个程序,他的作用是先查看一下/root/test/logical这个名称是否存在,若不存在,则创建一个文件。使用touch来创建,创建完成后离开;如果存在的话,判断该名称是否为文件,若为文件则将之删除后新建一个目录。文件名为loglical,之后离开;如果存在的话,而且该名称为目录,则删除此目录。





1 if [ ! -e "/root/test/logical" ]; then touch "hh";  elif [ -f "/root/test/logical" ];then rm /root/test/logical && mkdir logical&&exit;elif  [ -d "/root/test/logical" ];then rm /root/test/logical; fi
判断文件是否存在  11.导出 2013-05-24 15:00:00 ~ 2013-05-28 16:00:00 之间的apache访问日志





1 sed -n '/24\/May\/2013:15:00:01/,/28\/May\/2013:16:59:58/p' xxxx-access_log > 20130524.15-20130528.16-access_log
截取指定范转的内容  PS:需要注意的是如果起始时间在日志中不存在,则整个截取将返回 0 行结果。而如果结束时间在日志中不存在,则会截取到日志的最后一条。所以在截取前得要找到最日志中最合适的起始点和结束点。
另一种做法是先使用grep去找到两个点  再使用sed去截取





1 # 找出 2013-05-24 15点第一条记录的时间[iyunv@style logs]# grep '24/May/2013:15' xxxx-access_log | head -110.200.114.183 - - [24/May/2013:15:00:01 +0800] "GET /gp10/pic_259_218_1368781965.png HTTP/1.0" 401 484# 找出 2013-05-28 16点最后一条记录的时间[iyunv@style logs]# grep '28/May/2013:16' xxxx-access_log | tail -1222.92.115.195 - - [28/May/2013:16:59:58 +0800] "GET /favicon.ico HTTP/1.1" 404 17846# 然后取这两个时间段之间的记录
View Code  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146934-1-1.html 上篇帖子: 【转】shell脚本写的俄罗斯方块游戏 下篇帖子: msfpayload反弹shell
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表