猜随机数的大小

描述:

写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个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的更多相关文章

  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. PKUWC Slay The Spire

    题面链接 LOJ sol 好神啊.果然\(dp\)还是做少了,纪录一下现在的思维吧\(QAQ\). 我们首先可以发现期望是骗人的,要不然他乘的是什么xjb玩意. 其实就是要求所有方案的最优方案和. 因 ...

  2. ThinkPHP 5.x远程命令执行漏洞分析与复现

    0x00 前言 ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞.该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的 ...

  3. Android系统权限和root权限

    Android系统权限和root权限http://www.verydemo.com/demo_c189_i277.html

  4. 团体程序设计天梯赛 L1-049. 天梯赛座位分配(测试数据+不同方法)

    Data: /*33 2 1#11 4 7 10 13 16 19 22 25 2831 33 35 37 39 41 43 45 47 4951 53 55 57 59 61 63 65 67 69 ...

  5. laravel DB listen 回调追踪产生 sql 语句的代码

    \DB::listen(function (QueryExecuted $sql) { \Log::info($sql->sql); \Log::info((new \Exception())- ...

  6. lower_bound/upper_bound example

    http://www.cplusplus.com/reference/algorithm/upper_bound/左闭右开 Return iterator to lower bound Returns ...

  7. array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。

    <?php $a=array("a"=>"red","b"=>"green"); array_unsh ...

  8. Hadoop基础-HDFS的读取与写入过程

    Hadoop基础-HDFS的读取与写入过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了了解客户端及与之交互的HDFS,NameNode和DataNode之间的数据流是什么样 ...

  9. 【清华集训 2017】小Y的地铁 [模拟退火]

    小Y的地铁 Time Limit: 50 Sec  Memory Limit: 256 MB Description Input Output 对于每组输入数据,输出一行一个整数,表示除掉这 n 个换 ...

  10. 安装Win8引起Ubuntu启动项丢失的恢复过程

    画电路图的时候手痒,于是将之前做好的Win8PE拿出来装着玩儿.至于Win8的pE很好做,用UltraISO将Win8 的镜像用制作硬盘镜像的方法烧进U盘就行了. Win8的安装过程也很简单.安装前为 ...