shell脚本练习题->1
猜随机数的大小
描述:
写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则让用户一直输入:并且提示用户输入的数字比预设数字大或者小
分析:
1:随机数字是如何生成的
2:这是一个死循环,直到猜对了才能退出
3:需要判断大小
脚本实现:
- [root@jumpserver- scripts]# cat num_random.sh
- #!/bin/bash
- num=$(echo $(($RANDOM%+)))
- i=
- while true
- do
- read -p "请猜一下这个数是多少:" number
- let i++
- if [[ ! $number =~ ^[-]+$ ]];then
- echo "请检查输入的是否为数字"
- elif [ $number -gt $num ];then
- echo "你输入的数大了!"
- elif [ $number -lt $num ];then
- echo "你输入的数小了- -"
- else
- echo "恭喜你!都会抢答了。"
- echo "你一共猜了 $i 次"
- exit
- fi
- done
实现的效果:
- [root@jumpserver-70 scripts]# sh num_random.sh
- 请猜一下这个数是多少:10
- 你输入的数小了- -
- 请猜一下这个数是多少:50
- 你输入的数小了- -
- 请猜一下这个数是多少:90
- 你输入的数大了!
- 请猜一下这个数是多少:80
- 你输入的数小了- -
- 请猜一下这个数是多少:85
- 你输入的数大了!
- 请猜一下这个数是多少:83
- 你输入的数小了- -
- 请猜一下这个数是多少:84
- 恭喜你!都会抢答了。
- 你一共猜了 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改名用替换方式
脚本实现:
- [root@jumpserver- scripts]# cat make_file.sh
- #!/bin/bash
- for i in {..}
- do
- file=$(uuidgen | sed -r 's#[0-9-]+##g'|cut -c -)
- [ -f test_$file.html ]
- if [ $? -eq ];then
- echo "这个文件已经存在。。"
- else
- touch /opt/test_${file}.html &>/dev/null
- echo test_${file}.html >>/opt/test1.txt
- echo "你已经创建了 test_$file.html 文件"
- fi
- done
- echo "------------正在执行操作------------"
- for n in {..}
- do
- name=$(sed -rn ${n}p /opt/test1.txt | sed -r 's#.*_(.*).html#\1#g')
- name_new=test_done_${name}.HTML
- mv /opt/test_${name}.html /opt/$name_new
- echo "文件 $name_new 修改成功"
- done
- > /opt/test1.txt
第二种方法:
- [root@web03 ~]# cat for_file2.sh
- #!/bin/bash
- #.循环创建10个随机文件名的html文件
- for i in {..}
- do
- File_Name=$(openssl rand -base64 |sed 's#[^a-z]##g'|cut -c1-)
- touch test_${File_Name}.html
- done
- #.查找当前目录下.html结尾的文件,写入一个文件中
- find ./ -type f -name "*.html" > .txt
- for i in $(cat .txt)
- do
- #.将带html修改为HTML ${i/html/HTML} 将文件名后缀是html替换为HTML
- mv $i ${i/html/HTML}
- done
实现效果:
- [root@jumpserver- scripts]# sh make_file.sh
- 你已经创建了 test_fababba.html 文件
- 你已经创建了 test_cdedacafaf.html 文件
- 你已经创建了 test_eedbacbafc.html 文件
- 你已经创建了 test_adbfdeb.html 文件
- 你已经创建了 test_afdddcdebe.html 文件
- 你已经创建了 test_bacfaeeacf.html 文件
- 你已经创建了 test_bcfadfbcdd.html 文件
- 你已经创建了 test_faeebfcdc.html 文件
- 你已经创建了 test_eebecffac.html 文件
- 你已经创建了 test_eefca.html 文件
- ------------正在执行操作------------
- 文件 test_done_fababba.HTML 修改成功
- 文件 test_done_cdedacafaf.HTML 修改成功
- 文件 test_done_eedbacbafc.HTML 修改成功
- 文件 test_done_adbfdeb.HTML 修改成功
- 文件 test_done_afdddcdebe.HTML 修改成功
- 文件 test_done_bacfaeeacf.HTML 修改成功
- 文件 test_done_bcfadfbcdd.HTML 修改成功
- 文件 test_done_faeebfcdc.HTML 修改成功
- 文件 test_done_eebecffac.HTML 修改成功
- 文件 test_done_eefca.HTML 修改成功
- [root@jumpserver- opt]# ll
- total
- -rw-r--r-- root root Sep : test1.txt
- -rw-r--r-- root root Sep : test_done_aadacfbdea.HTML
- -rw-r--r-- root root Sep : test_done_badbcedabf.HTML
- -rw-r--r-- root root Sep : test_done_ccdbddfaff.HTML
- -rw-r--r-- root root Sep : test_done_daafffacfb.HTML
- -rw-r--r-- root root Sep : test_done_dbdecdabdc.HTML
- -rw-r--r-- root root Sep : test_done_dceafb.HTML
- -rw-r--r-- root root Sep : test_done_dcedbcbfa.HTML
- -rw-r--r-- root root Sep : test_done_eacfaabcff.HTML
- -rw-r--r-- root root Sep : test_done_ecbceabcbd.HTML
- -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
脚本实现:
- #!/bin/bash
- time = $(date + %F)
- df -h > $time.log
查找文件->打包->还原
分析:
1:在/backup目录下创建.txt 文件 ,并筛选出来
2:批量把txt为结尾的文件改为txt.bak
3: 把所有的.bak文件打包压缩为123.tar.gz
4: 批量还原文件的名字,及把增加的.back再删除
脚本实现:
- [root@web03 ~]# cat file.sh
- #.修改名称
- find /backup/ -type f -name "*.txt" > /tmp/.txt
- for i in $(cat /tmp/.txt)
- do
- mv $i ${i}.bak
- done
- #.重新查找,bak文件,然后进行打包
- cd /backup && tar czf .tar.gz $(find /backup/ -type f -name "*.bak")
- #.将.bak还原.txt
- find /backup/ -type f -name "*.bak" >/tmp/.txt
- for i in $(cat /tmp/.txt)
- do
- mv $i ${i%.*}
- done
实现效果:
监控80端口是否开启
描述:
写一个脚本,判断本机的80端口(加入是httpd)是否开启,如果开启则什么都不用干,如果发现端口不存在,那么重启一下http服务,并发送邮件通知自己,脚本写好后每分钟执行一次,也可以写一个死循环
分析:
1:检测80端口是否正常 netstat -lntp |grep ":80"
2: 如果不正常重启nginx
3: 如果进程是启动的则重启,否则直接启动
脚本实现:
- [root@web03 ~]# cat status.sh
- #!/usr/bin/bash
- while true
- do
- #.检查Nginx是否存或,让wc统计行数,方便整数比对
- Nginx_status=$(netstat -lntp|awk '{print $4}'|grep :$|wc -l)
- #.检查Nginx的值是1还是0,如果是0则代表没启动Nginx,如果是1则不做处理
- if [ $Nginx_status -eq ];then
- echo "正在尝试重启..."
- systemctl restart nginx &>/dev/null
- if [ $? -eq ];then
- echo "重启成功..."
- else
- echo "重启失败"
- fi
- fi
- #.判断结束后,休息5s
- sleep
- done
网页出现502错误重启php
描述:
现在有一个lnmp环境, 经常出现502错误, 只要一重启php-fpm即可解决,如果不重启则会持续非常长的一段时间,所有有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下php-fpm
分析:
1.动态的监控日志尾部最后300行,统计502出现的总50次数
2.精准判断是否是502错误,不是则不处理,是则重启php-fpm
脚本实现:
- #.准备对应的Nginx环境
- [root@web03 ~]# cat /etc/nginx/conf.d/discuz.conf
- server {
- listen ;
- root /code;
- index index.html;
- server_name _;
- location / {
- proxy_pass http://127.0.0.1:8888;
- }
- location /test {
- root /code;
- index inde.html;
- }
- }
- .编写对应的环境
- [root@web03 ~]# cat s.sh
- #!/usr/bin/bash
- while true
- do
- #.实时的抓取日志尾部的信息,筛选出502,进行统计
- LogFile=$(tail -n300 /var/log/nginx/access.log|grep |wc -l)
- #.使用if进行判断
- if [ $LogFile -gt ];then
- echo "正常重启php-fpm"
- pkill php-fpm && systemctl start php-fpm &>/dev/null
- if [ $? -eq ];then
- echo "重启成功"
- else
- echo "重启失败"
- fi
- else
- echo "实时监控日志没有达到300行502"
- fi
- sleep
- done
使用ab工具进行压力测试:
- 故障的 url: ab -n -c http://10.0.0.9/
- 恢复的 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
脚本实现:
- [root@web03 ~]# cat num.sh
- #!/usr/bin/bash
- for i in Bash also interprets a number of multi-user optios
- do
- #.传统获取变量的个数
- #re=$(echo -n $i|wc -c)
- #.获取变量的个数
- re=$(echo ${#i})
- #.进行数字比对
- if [ $re -lt ];then
- echo $i
- fi
- done
shell脚本练习题->1的更多相关文章
- shell脚本练习题(更新中...)
练习题(这里贴的是自己写的代码, 网上给的题目代码我会附加在最下面) 1. 编写shell脚本,计算1-100的和: #!/bin/bash #caculate the to `; do sum=$[ ...
- shell脚本练习题
下面列出了几个linux学习中的shell脚本题目 1.九九乘法表 #!/bin/bash echo "九九乘法表" # 注意((之间不能有空格.加减乘除的格式.还有转义字符\*. ...
- linux 的基本操作(编写shell 脚本)
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...
- shell脚本结构
echo $? 代表上一次命令的状态返回值,‘0’则代表为真<执行成功>,‘非零’则代表为假<执行失败>. shell脚本: <判断老男孩的年纪> [root@bo ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- 第三部分shell编程3(shell脚本2)
7. if 判断一些特殊用法 if [ -z $a ] 这个表示当变量a的值为空时会怎么样if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样if ...
- shell基础练习题
shell 基础练习题 1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 #!/bin ...
- Shell循环练习题
Shell循环练习题 目录 Shell循环练习题 1.计算从1到100所有整数的和 2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和.奇数和 ...
- Shell条件练习题
Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...
随机推荐
- 【刷题】BZOJ 1061 [Noi2008]志愿者招募
Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...
- 51nod 1376 最长上升子序列的数量 | DP | vector怒刷存在感!
51nod 1376 最长上升子序列的数量 题解 我们设lis[i]为以位置i结尾的最长上升子序列长度,dp[i]为以位置i结尾的最长上升子序列数量. 显然,dp[i]要从前面的一些位置(设为位置j) ...
- 【bzoj3930】 CQOI2015—选数
http://www.lydsy.com/JudgeOnline/problem.php?id=3930 (题目链接) 题意 求在${[L,R]}$中选出${n}$个数,可以相同,使得它们的${gcd ...
- Python OS模块操作文件和目录
#-*-coding:utf-8-*- import os import shutil ###############OS模块############## #获得当前python脚本的工作目录 os. ...
- 遇到问题----linux-----linux 打开文件数 too many open files 解决方法
在运行某些命令或者 tomcat等服务器持续运行 一段时间后可能遇到 too many open files. 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每个用 ...
- bzoj 3779: 重组病毒
一道好题~~ 一个点到根传染需要的时间是这段路径上不同颜色的数目,一个点子树到根平均传染时间就是加权平均数了(好像是废话). 所以只要用线段树维护dfs序就这个可以了,换根的话一个点的子树要么在dfs ...
- lumen passport Call to undefined method Laravel\Lumen\Application::group()
解决方法:https://github.com/dusterio/lumen-passport/issues/69 public function boot() { LumenPassport::ro ...
- 130. Surrounded Regions(M)
130.Add to List 130. Surrounded Regions Given a 2D board containing 'X' and 'O' (the letter O), capt ...
- Android dumpsys命令详细使用
一.dumpsys命令介绍 1.命令说明 Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息 命令格式: adb shell dumpsys [system serbices] 2.系 ...
- UIScrollView原理
我是Mike Ash的Let’s Build…系列文章的忠实粉丝,在这一系列文章中他从头设计Cocoa的控件来解释他们的工作原理.在这里我要做一点类似的事情,用几行代码来实现我自己的滚动试图.不过首先 ...