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秒的 ...
随机推荐
- USACO Section 1.5 Superprime Rib 解题报告
题目 题目描述 超级素数的定义如下:如果有个素数我们从右往左依次去掉一位数,每次去掉一位数剩下的数仍然是素数,那么我们称这个数是超级素数.例如7331,这是一个素数,从右往左依次去掉一位数733, 7 ...
- 【bzoj2780】 Sevenk Love Oimaster
http://www.lydsy.com/JudgeOnline/problem.php?id=2780 (题目链接) 题意 给出很多主串和很多询问串,求一个询问串在多少主串中出现过 Solution ...
- 【uoj129】 NOI2015—寿司晚宴
http://uoj.ac/problem/129 (题目链接) 题意 给出2~n这n-1个数,求选2个集合,使得从两集合中任意各选取1个数出来它们都互质.求方案数. Solution PoPoQQQ ...
- RRDtool绘制lvs连接数图形
需求:用RRDtool绘制lvs的连接数图形 RRDtool是一个强大的绘图工具,作者是Tobias Oetiker. RRD全称Round Robin Database,轮转数据库,也是一个时间序列 ...
- 遇到问题----java----myeclipse或者eclipse发布的项目时配置文件不更新或者无配置文件
myeclipse或者eclipse发布的项目时配置文件不更新或者无配置文件. 正常的web项目有目录 src/main/resources 和 src/main/java 这两个目录默认在编译发布时 ...
- Windows + Ubuntu下JDK与adb/android环境变量配置完整教程
假设JDK和android sdk路径分别如下: D:\Program Files\Java\jdkD:\android-sdk 1.JDK环境变量配置JAVA_HOME=D:\Program Fil ...
- 导入eclipse工程到Android Studio中
ref:从 Eclipse 迁移至 Android Studio | Android Studiohttps://developer.android.com/studio/intro/migrate. ...
- NIN (Network In Network)
Network In Network 论文Network In Network(Min Lin, ICLR2014). 传统CNN使用的线性滤波器是一种广义线性模型(Generalized linea ...
- HDU 6230
Palindrome Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tota ...
- VS生成事件执行XCOPY时出现Invalid num of parameters的解决方案
最近想偷懒 想把项目生成的dll全部自动汇集到一个文件夹下 于是乎就动用了VS的生成后事件 在执行Xcopy的时候碰到了点问题 Invalid number of parameters 挺奇怪的,在公 ...