Linux---Day13

作者: 茶馆先生的马褂 | 来源:发表于2020-04-17 14:03 被阅读0次

    脚本编程控制结构之until
    循环
    for
    while
    until

    while CONDITION; do
    statement
    done
    进入循环:条件满足
    退出循环:条件不满足

    until CONDITION; do
    statement
    ...
    done
    进入循环:条件不满足
    退出循环:条件满足

    vim quit.sh
    
    #!/bin/bash
    read -p "Input something:" STRING
    while [ $STRING != 'quit' ]; do
    echo $STRING | tr 'a-z' 'A-Z'
    read -p "Again Input something:" STRING 
    done
    
    chmod +x quit.sh
    ./quit.sh
    
    bash -x quit.sh (查看脚本进展过程)
    
    vim until.sh
    #!/bin/bash
    #
    read -p "Input something:" STRING (输入字符保存在STRING当中)
    until [ $STRING == 'quit' ]; do
    echo $STRING | tr 'a-z' 'A-Z'
    read -p "Input something:" STRING
    done
    
    chmod +x until.sh
    ./until.sh
    

    每隔5秒钟查看hadoop是否登录

    vim hadoop.sh
    
    #!/bin/bash
    #
    who | grep "hadoop" &> /dev/null
    RETVAL = $? ($? 上一个命令的结果 0 为执行正确)
    
    until [ $RETVAL -eq 0 ]; do
    echo "hadoop is not come."
    sleep 5
    who | grep "hadoop" &> dev/null
    RETVAL = $?
    done
    echo "hadoop is logged in."
    chmod +x hadoop.sh
    

    修正版:

    vim hadoop.sh
    
    #!/bin/bash
    #
    until who | grep "hadoop" &> /dev/null; do 
    echo "hadoop is not come."
    sleep 5
    done
    echo "hadoop is logged in."
    
    chmod +x hadoop.sh
    

    for 循环
    for 变量 in 列表;do
    循环体
    done

    for ((expr1;expr2;expr3));do
    循环体
    done
    近似C语言的风格
    计算1-100以内所有正整数的和

    #!/bin/bash
    #
    declare -i SUM = 0
    for I in {1..100}; do
    let SUM+=$I
    done
     echo $SUM
    

    换一种写法

    #!/bin/bash
    #
    declare -i SUM=0
    for ((I =1;I <=100;I++));do
    let SUM+=$I
    done
    echo $SUM
    

    for((I=2;I<=100;I+=2));do
    100以内所有偶数的和
    for((I=1;I<=100;I+=2));do
    100以内所有奇数的和

    ***通过ping命令,测试192.168.0.151到192.168.0.254之间的所有主机是否在线,
    如果在线,就显示“ip is up”,其中IP要换位真正的IP地址,且以绿色显示;
    如果不在线,就显示“ip is down”,其中IP要换位真正的IP地址,且以红色显示。

    要求:分别用while ,until ,for 循环实现
    ping命令的使用:ping 192.168.0.254
    ping -c 1 192.168.0.254 -c表示ping的次数,否则会一直ping下去
    echo $?
    ping -W
    -W选项: timeout Time to wait for a response, in seconds.
    ping -c 1 -W 1 192.168.0.245
    ping -c 1 -W 1 192.168.0.245 &> /dev/null

    awk

    awk:报告生成工具,当cut完成不了任务时使用awk,也是一个文本处理工具
    一次从中读一行,每读一行按照指定的分隔符在内部切开,切开后给切开的每一段一个标识符。将处理后的结果显示出来。
    df -Ph

    awk 'PATTERN{ACTION}' file 默认分隔符是[space]
    PATTERN表示过滤,指出处理哪些符合条件的行;
    ACTION:
    print $1 显示第一段

    df -Ph | awk '{print $1}' 显示第一段
    df -Ph | awk '{print $2}'显示第二段
    df -Ph | awk '{print $1,$2}' 显示第一段和第二段,之间用,隔开
    df -Ph | awk '{print $0}' 显示所有字段
    df -Ph | awk '{print $NF}' NF number of field 字段个数,显示最后一段
    awk -F: '{print 1,3}' /etc/passwd 分隔符为“:”
    fdisk -l 2> /dev/null 将错误信息给到/dev/null
    fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" 以Disk开头,s或h开头后面跟d, a-z中任意一个字符
    结果:Disk /dev/sda: 128.8GB, 128849018880 bytes
    fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'
    结果:Disk /dev/sad

    关机命令:shutdown -h now

    R: the system is going down for system halt NOW!

    添加虚拟磁盘:

    ***抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒后再分区);并为其创建三个主分区,第一个为20M,第二个为512M,第三个为128M,且第三个为swap分区类型,(提示:将分区命令通过echo传送给fdisk即可实现)
    删除所有分区
    dd if=/dev/zero of=/dev/sdb bs=512 count=1
    把所有操作同步内存与硬盘
    sync
    sleep 3

    fdisk -l | grep "^Disk /dev/[sh]d[a-z]"
    fdisk -l 2> /dev/null | grep  "^Disk /dev/[sh]d[a-z]"
    fdisk -l 2> /dev/null | grep  "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'
    
    vim setpart.sh
    #!/bin/bash
    #
    echo 'n ###new 一个分区
    p ###主分区还是扩展分区
    1 ###第几个编号
    
    +20M 
    n
    p
    2
    
    +512M
    n
    p
    3
    
    +128M
    t ###调整哪个分区
    3 ###第三个
    82 ###类型为82
    w' | fdisk /dev/hda
    
    :wq
    
    sync
    fdisk -l
    

    相关文章

      网友评论

        本文标题:Linux---Day13

        本文链接:https://www.haomeiwen.com/subject/qwtvvhtx.html