day60-day-shell-while

while

1.while本质上就是循环

只不过while支持条件测试语句
整数比对
字符串比对
正则比对
文件比对

2.while读入文件的方式比较的特殊

while读入文件按行读取 IFS指定分隔符
for读入文件按空格读取 IFS指定分隔符

while read  file
do
    echo $file
done < /etc/passwd

循环中的控制语句 ----> for while

exit
break
continue

1.exit,退出整个程序。当脚本碰到exit时,直接退出,剩余不管有多少代码都不执行。
2.break,结束当前循环,但会执行循环之后的所有的代码。
3.continue 忽略本次循环剩余的所有代码,直接进行下一次循环,直到循环结束,然后继续循环之后的代码。

需求:循环嵌套continue,打印1-9当数值为5则跳过本次循环,继续下一次循环。请分别使用for和while实现。
需求2:循环嵌套break,打印1-9当数值为5则停止。请分别使用for和while实现。

需求1: 使用while读入文件方式,批量创建用户

[root@manager while]# cat while-12.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-11-01
# FileName:   while-12.sh
# URL:         https://www.xuliangwei.com
# Description: 

while read line
do
    id $line &>/dev/null
    if [ $? -eq 0 ];then
        continue
    else
        useradd $line
    fi
done < user.txt

需求2: 使用while读入文件方式,批量创建用户以及密码 文件格式: username:password

[root@manager while]# cat while-13.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-11-01
# FileName:   while-13.sh
# URL:         https://www.xuliangwei.com
# Description: 

while read line
do
    user=$(echo $line | awk -F ":" '{print $1}')
    pass=$(echo $line | awk -F ":" '{print $2}')
    
    id $user &>/dev/null
    if [ $? -eq 0 ];then
        continue
    else
        useradd $user 
        echo "$pass" | passwd --stdin $user
    fi
done <user.txt

需求3: 猜数字游戏
1)随机输出一个1-100的数字 echo ((RANDOM%100+1))
2)要求用户输入的必须是数字(数字处加判断)
3)如果比随机数小则提示比随机数小了 大则提示比随机数大了
4)正确则退出 错误则继续死循环
5)最后统计猜了多少次(猜对了多少次,失败多少次)

[root@manager while]# cat while-14.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-11-01
# FileName:   while-14.sh
# URL:         https://www.xuliangwei.com
# Description: 

SJ=$(($RANDOM%100+1))
i=1

while true
do
    read -p "请输入你要猜的数: " Action

    if [ $Action -eq $SJ ];then
        echo "恭喜你 gdx...."
        break

    elif [ $Action -lt $SJ ];then
        echo "太小了 gdx...."
    else
        echo "太大了 gdx...."
    fi
    let i++
done
    echo "你总共猜了 $i 次, 失败了 $(( $i-1 )) 次"

需求4: 在一个2000多行数据文件,然后有10个新的文件,1-5行数据放到第一个文件里,6-10行数据 放到第二个文件里...46-50数据放到第10个文件里。然后51-55数据在放到第一个文件里。如何实现?【可忽略】

[root@manager while]# cat while-15.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-11-01
# FileName:   while-15.sh
# URL:         https://www.xuliangwei.com
# Description: 

while true
do
    for i in $(seq 10)
    do
        head -5 file.txt >> file_$i.txt
        sed -i '1,5d' file.txt

        if [ ! -s file.txt ];then
            exit
        fi
    done
done


#!/bin/bash
a=0
b=0
while [ $b -lt 2000 ]
do
        file=num.txt
        while [ $a -lt 10 ]
        do
                a=$[$a+1]
                b=$[$b+5]
                echo "$a $b"
                line=$(awk "NR==$[$b-4],NR==$b" $file)
                echo "$line">>${a}.txt
        done
        a=0
done


1.按照时间生成文件2018-05-22.log将每天的磁盘使用状态写入到对应日期的文件

2.统计Nginx日志中每个IP的访问量有多少,日志如下:
192.168.56.1 - - [21/May/2018:20:44:06 -0400] "GET /index.html HTTP/1.0" 404 169 "-" "ApacheBench/2.3" "-"/code/index.html

3.写一个脚本计算一下Linux系统所有进程占用内存大小的和。

4.在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件

[root@manager-61 /work]#vim work4.sh

  1 #!/bin/bash
  2 #*********************
  3 #Author: 流星花雨
  4 #QQ: 1679338722
  5 #Date: 2019-11-02
  6 #FileName: work4.sh
  7 #URL: https://www.leitiancheng.cn
  8 #Description: The test script
  9 #*********************
 10 
 11 while  [ $i -le 10 ]
 12 do
 13         touch /backup/$i.txt
 14         #rm -rf /backup/$i.txt
 15         let i++ 
 16     
 17 done
1.批量修改txt为txt.bak
  file=$(find /backup/ -type f -name "*.txt")
  for i in $file
  do
  #echo $i
          mv $i $i.bak 
 done
2.把所有的.bak文件打包压缩为123.tar.gz
 cd /backup/ && tar czf 123.tar.gz ./*.bak 
 rm -rf /backup/*.bak
    3.批量还原文件的名字,及把增加的.bak再删除
    tar xf /backup/123.tar.gz -C /backup/
    Find=$(find /backup/ -type f -name "*.bak")
for l in $Find
do
    mv $l ${l%.*}
done

5.把一个文本文档的前五行中包含字母的行删除掉,同时把6到10行中的全部字母删除掉

nu=$(wc -l file.txt |awk '{print $1}')
for i in $(seq 1 5)
do
    l=$(sed -n ${i}p file.txt)
    if echo $l |grep -Evq [a-Z];then
        echo $l
    
    fi
done
for i in $(seq 6 10)
do
    k=$(sed -n ${i}p file.txt)
        echo $k|sed 's#[a-Z]##g'
        
done
for i in $(seq 11 $nu)
do
    sed -n ${i}p file.txt
done

7.写个shell,看看你的linux系统中是否有自定义用户(普通用户),若是有,一共有几个?

[root@manager-61 /work]#cat work6.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-11-02
#FileName: work6.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Uid=$(awk -F ":" '{print $3}' /etc/passwd)
for i in $Uid
do
if [ $i -ge 1000 ];then
    echo $i >>user.txt
fi
done
nu=$(wc -l user.txt| awk  '{print $1}')
echo $nu
rm -rf user.txt

8.写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10
history |awk '{print $2}'|sort|uniq -c|sort -nr|head
9.中企动力面试题
用shell处理以下内容
1、按单词出现频率降序排序!

declare -A array_txt
txt="the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation"
txt=$(echo $txt |sed 's#[.,]# #g')
for i in $txt
do
    let array_txt[$i]++
done
#循环数组
for j in ${!array_txt[@]}
do
    echo 次数是: "${array_txt[$j]}"    索引是: "$j"|sort -t ":" -k2|sort -nr
done

2、按字母出现频率降序排序!

the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation

declare -A array_txt
te () {
txt="the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation"
txt=$(echo $txt |grep -o [a-Z])
for i in $txt
do
    let array_txt[$i]++
done
#循环数组
for j in ${!array_txt[@]}
do
    echo 次数是: "${array_txt[$j]}"    索引是: "$j"|sort -t ":" -k2
done
}
te|sort -t ":" -k2 -nr

10.写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些

for i in $(seq 254)
do
{
   ping -c1 10.0.0.$i &>/dev/null
   if [ $? -eq 0 ];then
       echo 10.0.0.$i 存活
   fi
   }&
done
wait

    函数、

需求3:使用case实现系统管理工具箱。
Command action
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序


cat << -EOF
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
-EOF
read -p "请输入相应的指令: [ h | f | d | m | u | q ]" i
case $i in
    h)
        clear
        man cat
        ;;
    f)
        clear
        fdisk -l
        ;;
    d)
        clear
        
        df -h
        ;;
    m)
        clear
        free -m
        ;;
    u)
        clear
        top
        ;;
    q)
        exit
        ;;
    *)
        echo 回车好玩吗
esac

需求3:使用case、循环、函数、实现JumpServer跳板机功能。
1.用户登陆该服务器则自动执行该脚本。
2.脚本提示可连接主机列表。
3.该脚本无法直接退出。

5.case场景示例,实现多级菜单功能。

[root@manager-61 /work]#cat work12.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-11-03
#FileName: work12.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
while true
do
cat << -EOF
1 nginx
2 php
3 httpd
4 nfsd
5 vsftpd
6 quit
-EOF
read -p "请输入要操作的服务 [ 1 | 2 | 3 | 4 | 5 | 6 ]" server
case $server in
    1|nginx|Nginx|NGINX)
        clear
        cat << EOF
        ---------------
        1 nginx-1.14
        2 nginx-1.12
        3 nginx-1.10
        4 返回上一层
        --------------
EOF
        
        read -p "请输入你要安装的大版本号 [ 1 | 2 | 3 | 4 ]" b

        case $b in 
            1)
                echo nginx-1.14 已安装
                ;;
            2)
                echo nginx-1.12已安装
                ;;
            3)
                echo nginx-10已安装
                ;;
            4)
                #cat << -EOF
                                #1 nginx
                #2 php
                #3 httpd
                #4 nfsd
                #5 vsftpd
                #6 quit
-EOF
                #read -p "请输入要操作的服务 [ 1 | 2 | 3 | 4 | 5 | 6 ]" server
                continue
                ;;

            *)
            exit
        esac
        ;;
    2|php|Php|PHP)
        
        cat <<EOF
        1 php-7.1
        2 php-7.2
        3 返回上一级
EOF
    read -p "请输入要安装的版本 [ 1 | 2 | 3 ]" c
    case $c in
        1)
            echo php-7.1已安装
            ;;
        2)
            echo php-7.2已安装
            ;;
        3)
            continue
            ;;

        *)
            eixt
    esac
    ;;
    3|httpd|Httpd|HTTPD)
        cat << EOF
            1 http-1.0
            2 http-2.0
            3 返回上一级
EOF
        read -p "请输入版本号 [ 1 | 2 | 3 ]" d
        case $d in
            1)
                echo php-1.0已安装
                ;;
            2)
                echo php-2.0已安装
                ;;
            3)
                continue
                ;;
            *)
            exit
        esac
    ;;
        *)
    exit
esac
done
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,743评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,567评论 0 0
  • Shell入门 什么是shell? Shell其实是一个命令解释器,作用是解释执行用户输入的命令以及程序等,用户每...
    酷酷的伟阅读 422评论 0 1
  • 优先级就近原则,同权情况下样式定义为最近者为准载入样式以最后载入的定位为准(后写的样式优先级高,前提是大家的权重一...
    9979eb0cd854阅读 642评论 0 1