猜随机数的大小

描述:

写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则让用户一直输入:并且提示用户输入的数字比预设数字大或者小

分析:

1:随机数字是如何生成的

2:这是一个死循环,直到猜对了才能退出

3:需要判断大小

脚本实现:

  1. [root@jumpserver- scripts]# cat num_random.sh
  2. #!/bin/bash
  3.  
  4. num=$(echo $(($RANDOM%+)))
  5. i=
  6.  
  7. while true
  8. do
  9. read -p "请猜一下这个数是多少:" number
  10. let i++
  11. if [[ ! $number =~ ^[-]+$ ]];then
  12. echo "请检查输入的是否为数字"
  13. elif [ $number -gt $num ];then
  14. echo "你输入的数大了!"
  15. elif [ $number -lt $num ];then
  16. echo "你输入的数小了- -"
  17. else
  18. echo "恭喜你!都会抢答了。"
  19. echo "你一共猜了 $i 次"
  20. exit
  21. fi
  22. done

实现的效果:

  1. [root@jumpserver-70 scripts]# sh num_random.sh
  2. 请猜一下这个数是多少:10
  3. 你输入的数小了- -
  4. 请猜一下这个数是多少:50
  5. 你输入的数小了- -
  6. 请猜一下这个数是多少:90
  7. 你输入的数大了!
  8. 请猜一下这个数是多少:80
  9. 你输入的数小了- -
  10. 请猜一下这个数是多少:85
  11. 你输入的数大了!
  12. 请猜一下这个数是多少:83
  13. 你输入的数小了- -
  14. 请猜一下这个数是多少:84
  15. 恭喜你!都会抢答了。
  16. 你一共猜了 7

文件中带随机数并修改

描述:

请写出:使用for循环在/opt目录下通过随机小写10个字母加固定字符串test批量创建10个html文件,创建完成后,讲test全部改为test_done(for循环实现),并html为大写HTML

分析:

1:随机是个小写字母 file=$(uuidgen | sed -r 's#[0-9-]+##g'|cut -c 1-10)

2:创建的文件名字放到一个文件中,再取出文件名

3:用mv改名用替换方式

脚本实现:

  1. [root@jumpserver- scripts]# cat make_file.sh
  2. #!/bin/bash
  3.  
  4. for i in {..}
  5. do
  6. file=$(uuidgen | sed -r 's#[0-9-]+##g'|cut -c -)
  7. [ -f test_$file.html ]
  8. if [ $? -eq ];then
  9. echo "这个文件已经存在。。"
  10. else
  11. touch /opt/test_${file}.html &>/dev/null
  12. echo test_${file}.html >>/opt/test1.txt
  13. echo "你已经创建了 test_$file.html 文件"
  14. fi
  15. done
  16.  
  17. echo "------------正在执行操作------------"
  18.  
  19. for n in {..}
  20. do
  21. name=$(sed -rn ${n}p /opt/test1.txt | sed -r 's#.*_(.*).html#\1#g')
  22. name_new=test_done_${name}.HTML
  23. mv /opt/test_${name}.html /opt/$name_new
  24. echo "文件 $name_new 修改成功"
  25. done
  26.  
  27. > /opt/test1.txt

第二种方法:

  1. [root@web03 ~]# cat for_file2.sh
  2. #!/bin/bash
  3.  
  4. #.循环创建10个随机文件名的html文件
  5. for i in {..}
  6. do
  7. File_Name=$(openssl rand -base64 |sed 's#[^a-z]##g'|cut -c1-)
  8. touch test_${File_Name}.html
  9. done
  10.  
  11. #.查找当前目录下.html结尾的文件,写入一个文件中
  12. find ./ -type f -name "*.html" > .txt
  13. for i in $(cat .txt)
  14. do
  15. #.将带html修改为HTML ${i/html/HTML} 将文件名后缀是html替换为HTML
  16. mv $i ${i/html/HTML}
  17. done

实现效果:

  1. [root@jumpserver- scripts]# sh make_file.sh
  2. 你已经创建了 test_fababba.html 文件
  3. 你已经创建了 test_cdedacafaf.html 文件
  4. 你已经创建了 test_eedbacbafc.html 文件
  5. 你已经创建了 test_adbfdeb.html 文件
  6. 你已经创建了 test_afdddcdebe.html 文件
  7. 你已经创建了 test_bacfaeeacf.html 文件
  8. 你已经创建了 test_bcfadfbcdd.html 文件
  9. 你已经创建了 test_faeebfcdc.html 文件
  10. 你已经创建了 test_eebecffac.html 文件
  11. 你已经创建了 test_eefca.html 文件
  12. ------------正在执行操作------------
  13. 文件 test_done_fababba.HTML 修改成功
  14. 文件 test_done_cdedacafaf.HTML 修改成功
  15. 文件 test_done_eedbacbafc.HTML 修改成功
  16. 文件 test_done_adbfdeb.HTML 修改成功
  17. 文件 test_done_afdddcdebe.HTML 修改成功
  18. 文件 test_done_bacfaeeacf.HTML 修改成功
  19. 文件 test_done_bcfadfbcdd.HTML 修改成功
  20. 文件 test_done_faeebfcdc.HTML 修改成功
  21. 文件 test_done_eebecffac.HTML 修改成功
  22. 文件 test_done_eefca.HTML 修改成功
  23. [root@jumpserver- opt]# ll
  24. total
  25. -rw-r--r-- root root Sep : test1.txt
  26. -rw-r--r-- root root Sep : test_done_aadacfbdea.HTML
  27. -rw-r--r-- root root Sep : test_done_badbcedabf.HTML
  28. -rw-r--r-- root root Sep : test_done_ccdbddfaff.HTML
  29. -rw-r--r-- root root Sep : test_done_daafffacfb.HTML
  30. -rw-r--r-- root root Sep : test_done_dbdecdabdc.HTML
  31. -rw-r--r-- root root Sep : test_done_dceafb.HTML
  32. -rw-r--r-- root root Sep : test_done_dcedbcbfa.HTML
  33. -rw-r--r-- root root Sep : test_done_eacfaabcff.HTML
  34. -rw-r--r-- root root Sep : test_done_ecbceabcbd.HTML
  35. -rw-r--r-- root root Sep : test_done_feceeecbdd.HTML

查看访问日志访问最高的ip

分析:

awk方法取到access.log的第一列ip地址。然后使用sort uniq 进行排列

命令实现:

awk '{print $1}' access.log- | sort |uniq -c |sort -rn | head -

把磁盘状态写进文件

分析:

1:磁盘状态查看  df -h

2:   把状态写进文件 df -h >$(date +%F).log

脚本实现:

  1. #!/bin/bash
  2.  
  3. time = $(date + %F)
  4. df -h > $time.log

查找文件->打包->还原

分析:

1:在/backup目录下创建.txt 文件 ,并筛选出来

2:批量把txt为结尾的文件改为txt.bak

3:   把所有的.bak文件打包压缩为123.tar.gz

4: 批量还原文件的名字,及把增加的.back再删除

脚本实现:

  1. [root@web03 ~]# cat file.sh
  2.  
  3. #.修改名称
  4. find /backup/ -type f -name "*.txt" > /tmp/.txt
  5.  
  6. for i in $(cat /tmp/.txt)
  7. do
  8. mv $i ${i}.bak
  9. done
  10.  
  11. #.重新查找,bak文件,然后进行打包
  12. cd /backup && tar czf .tar.gz $(find /backup/ -type f -name "*.bak")
  13.  
  14. #.将.bak还原.txt
  15. find /backup/ -type f -name "*.bak" >/tmp/.txt
  16.  
  17. for i in $(cat /tmp/.txt)
  18. do
  19. mv $i ${i%.*}
  20. done

实现效果:

监控80端口是否开启

描述:

写一个脚本,判断本机的80端口(加入是httpd)是否开启,如果开启则什么都不用干,如果发现端口不存在,那么重启一下http服务,并发送邮件通知自己,脚本写好后每分钟执行一次,也可以写一个死循环

分析:

1:检测80端口是否正常  netstat -lntp |grep ":80"

2:   如果不正常重启nginx

3: 如果进程是启动的则重启,否则直接启动

脚本实现:

  1. [root@web03 ~]# cat status.sh
  2. #!/usr/bin/bash
  3. while true
  4. do
  5. #.检查Nginx是否存或,让wc统计行数,方便整数比对
  6. Nginx_status=$(netstat -lntp|awk '{print $4}'|grep :$|wc -l)
  7.  
  8. #.检查Nginx的值是1还是0,如果是0则代表没启动Nginx,如果是1则不做处理
  9. if [ $Nginx_status -eq ];then
  10. echo "正在尝试重启..."
  11. systemctl restart nginx &>/dev/null
  12. if [ $? -eq ];then
  13. echo "重启成功..."
  14. else
  15. echo "重启失败"
  16. fi
  17. fi
  18. #.判断结束后,休息5s
  19. sleep
  20. done

网页出现502错误重启php

描述:

现在有一个lnmp环境, 经常出现502错误, 只要一重启php-fpm即可解决,如果不重启则会持续非常长的一段时间,所有有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下php-fpm

分析:

1.动态的监控日志尾部最后300行,统计502出现的总50次数
2.精准判断是否是502错误,不是则不处理,是则重启php-fpm

脚本实现:

  1. #.准备对应的Nginx环境
  2. [root@web03 ~]# cat /etc/nginx/conf.d/discuz.conf
  3. server {
  4. listen ;
  5. root /code;
  6. index index.html;
  7. server_name _;
  8.  
  9. location / {
  10. proxy_pass http://127.0.0.1:8888;
  11.  
  12. }
  13. location /test {
  14. root /code;
  15. index inde.html;
  16. }
  17. }
  18.  
  19. .编写对应的环境
  20. [root@web03 ~]# cat s.sh
  21. #!/usr/bin/bash
  22. while true
  23. do
  24.  
  25. #.实时的抓取日志尾部的信息,筛选出502,进行统计
  26. LogFile=$(tail -n300 /var/log/nginx/access.log|grep |wc -l)
  27.  
  28. #.使用if进行判断
  29. if [ $LogFile -gt ];then
  30. echo "正常重启php-fpm"
  31. pkill php-fpm && systemctl start php-fpm &>/dev/null
  32. if [ $? -eq ];then
  33. echo "重启成功"
  34. else
  35. echo "重启失败"
  36. fi
  37. else
  38. echo "实时监控日志没有达到300行502"
  39. fi
  40. sleep
  41. done

使用ab工具进行压力测试:

  1. 故障的 url: ab -n -c http://10.0.0.9/
  2. 恢复的 url: ab -n -c http://10.0.0.9/test/index.html

取出给定单词的长度

描述:

用shell打印下面这句话中字母数小于6个的单词Bash also interprets a number of multi-user optios

分析:

1.使用循环遍历
2.怎么统计单词数值 wc -c

脚本实现:

  1. [root@web03 ~]# cat num.sh
  2. #!/usr/bin/bash
  3.  
  4. for i in Bash also interprets a number of multi-user optios
  5. do
  6. #.传统获取变量的个数
  7. #re=$(echo -n $i|wc -c)
  8.  
  9. #.获取变量的个数
  10. re=$(echo ${#i})
  11. #.进行数字比对
  12. if [ $re -lt ];then
  13. echo $i
  14. fi
  15. done

shell脚本练习题->1的更多相关文章

  1. shell脚本练习题(更新中...)

    练习题(这里贴的是自己写的代码, 网上给的题目代码我会附加在最下面) 1. 编写shell脚本,计算1-100的和: #!/bin/bash #caculate the to `; do sum=$[ ...

  2. shell脚本练习题

    下面列出了几个linux学习中的shell脚本题目 1.九九乘法表 #!/bin/bash echo "九九乘法表" # 注意((之间不能有空格.加减乘除的格式.还有转义字符\*. ...

  3. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

  4. shell脚本结构

    echo $? 代表上一次命令的状态返回值,‘0’则代表为真<执行成功>,‘非零’则代表为假<执行失败>. shell脚本: <判断老男孩的年纪> [root@bo ...

  5. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  6. 第三部分shell编程3(shell脚本2)

    7. if 判断一些特殊用法 if [ -z $a ] 这个表示当变量a的值为空时会怎么样if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样if ...

  7. shell基础练习题

    shell 基础练习题 1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 #!/bin ...

  8. Shell循环练习题

    Shell循环练习题 目录 Shell循环练习题 1.计算从1到100所有整数的和 2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和.奇数和 ...

  9. Shell条件练习题

    Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...

随机推荐

  1. 【刷题】BZOJ 1061 [Noi2008]志愿者招募

    Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...

  2. 51nod 1376 最长上升子序列的数量 | DP | vector怒刷存在感!

    51nod 1376 最长上升子序列的数量 题解 我们设lis[i]为以位置i结尾的最长上升子序列长度,dp[i]为以位置i结尾的最长上升子序列数量. 显然,dp[i]要从前面的一些位置(设为位置j) ...

  3. 【bzoj3930】 CQOI2015—选数

    http://www.lydsy.com/JudgeOnline/problem.php?id=3930 (题目链接) 题意 求在${[L,R]}$中选出${n}$个数,可以相同,使得它们的${gcd ...

  4. Python OS模块操作文件和目录

    #-*-coding:utf-8-*- import os import shutil ###############OS模块############## #获得当前python脚本的工作目录 os. ...

  5. 遇到问题----linux-----linux 打开文件数 too many open files 解决方法

    在运行某些命令或者 tomcat等服务器持续运行 一段时间后可能遇到   too many open files. 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每个用 ...

  6. bzoj 3779: 重组病毒

    一道好题~~ 一个点到根传染需要的时间是这段路径上不同颜色的数目,一个点子树到根平均传染时间就是加权平均数了(好像是废话). 所以只要用线段树维护dfs序就这个可以了,换根的话一个点的子树要么在dfs ...

  7. lumen passport Call to undefined method Laravel\Lumen\Application::group()

    解决方法:https://github.com/dusterio/lumen-passport/issues/69 public function boot() { LumenPassport::ro ...

  8. 130. Surrounded Regions(M)

    130.Add to List 130. Surrounded Regions Given a 2D board containing 'X' and 'O' (the letter O), capt ...

  9. Android dumpsys命令详细使用

    一.dumpsys命令介绍 1.命令说明 Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息 命令格式: adb shell dumpsys [system serbices] 2.系 ...

  10. UIScrollView原理

    我是Mike Ash的Let’s Build…系列文章的忠实粉丝,在这一系列文章中他从头设计Cocoa的控件来解释他们的工作原理.在这里我要做一点类似的事情,用几行代码来实现我自己的滚动试图.不过首先 ...