• 交互输入与for语句


    交互输入与for语句

    1.   交互输入

    read命令可以同时定义多个变量值;输入的内容默认以空格为分隔符,将值输入到对应的变量中;read尽量避免交互

    如果默认值过多,最后所有的值会被赋予给最有一个变量;

    如果默认值过少,多于变量则为空值

    实例:

              read a b c

    aa bb cc

    read如何输入:

              read “请输入一个目录:” abc

              echo  -n “请输入一个目录:”--------   -n取消换行符  ;(分号)后面加read命令进行变量输值

              echo  -n “请输入一个目录:” ; read abc ---------原本的写法

    常用参数:

              -p  read -p “请输入一个目录:” 变量

              -t  定义超时时间   最好不要写在-p的后面  

    read  -t 5 -p “请输入一个目录:” 变量

             脚本默认值

                              [ -n $filename ] 判断没有为真 输入值

                              输入内容------------------------------------------------------------------

                              |                                                                                                       |

                              输入是否正确--------------                                                           没有输入--------------

                              |                                          |                                                           |                                 |

                              正确                              不正确,给提示                     提示输入   给出默认值

    read可以同时定义多个

    ls -d abc 只显示abc

    2.   for循环

    回顾:文件判断脚本

             #!/bin/bash

             read -p “输入一个文件名:” name

             if [ -z $name ];then

                      echo “Usage:输入一个文件名,/etc/fstab”

                      exit 1

             fi

             if [ -e $name ];then

                      echo “提示:输入的文件不存在”

                      exit 2

             elif [ -f $name ];then

                      echo  “这个文件是普通文件”

             elif [ -d $name ];then

                      echo  “这个文件是目录文件”

             elif [ -b $name ];then

                      echo  “这个文件是块文件”

             elif [ -L $name ];then

                      echo “这个文件是链接文件”

             else

                      echo   “这个文件是其他文件”

             fi

    修改成case语句

    case语句的语法格式

             case 变量 in

             PATTERN1)

                                       代码块1

                                       ;;

             PATTERN2)

    代码块2

                                       ;;

             *)

                                       代码库

             esac

    for语句的应用场景:

                      有一个功能,这个功能需要循环执行,只是执行对象不同;【对象必须是同类数据】

    For语句的格式:

             a = [‘a’,’b’,’c’]-------在python中,我们很多情况下,需要调用相应的方法去生成列表

             for 变量 in 列表;do

                              循环体

             done

    练习:九九乘法表

             {1..9}

     

    for i in {1..9};do

             for j in {1..9};do

                      echo -e -n “$j*$i=$[$i*$j] ”

             done

             echo “ ”

    done

             echo -e 可以识别特殊字符

     

    -e 使echo命令,能够识别特殊字符

    回车不换行

    换行符

    制表符

    md5sum---hash加密

    列表的生成方式:

    1、  直接给出字符串列表

    For I in a b c d e;do

              循环体

    done

    2、  整数列表

    A {start..end} //{1..1}是不行的 {1..100}==python range(1,100)

    B seq 命令引用 $(seq [start [step] end]) 步长 python range{1,00,2}

              Seq 20 30

    练习1:ping扫描

    #!/bin/bash

    #

    declare -i sum=0

    for i in ${seq 1 254};do

             ping -c 1 -w 1 10.6.12.$i &> /dev/null

             if [ $? -eq 0 ];then

    let sum++

    echo “10.6.12.$i 是通的”

                      else

                              echo “10.6.12.$i 是不通的”

                      fi

    done

    echo “共有$sum台电脑在线”

    练习2:1到100的偶数和

             #!/bin/bash

             #

             delcare -i sum=0

             for i in ${seq 0 2 100 } ;do

                      let sum+=$i

    done

    echo “$sum”

    3、  返回列表的命令

    $(command)

              应用场景:ls /var/log

              ls /var/log | grep “*.log$”

    #!/bin/bash

    #

                    declare -i sum=0

                    for i in /var/log/*.log;do

    #                       echo $i

                            if [[ $i == *.log ]];then

                                    echo $i

                                    let sum++

                            fi

                    done

                    echo $sum

    练习3:netstat -tan 查看网络状态,统计LISTEN出现的次数、ESTABLISHED出现的状态

    #!/bin/bash

    #

    declare -i sum1=0

    declare -i sum2=0

    declare -i sum3=0

    for i in $(netstat -tan | grep "^tcp"|  awk '{print $6}');do

            if [ $i="LISTEN" ];then

                    let sum1++

            elif [ $i="ESTABLISHED" ];then

                    let sum2++

            else

                    let sum3++

            fi

    done

    echo "监听的链接有:$sum1"

    echo "建立的链接有:$sum2"

    echo "其他的有:$sum3"

    常见的vim命令用法:

              dd 剪切  5dd---剪切五次

              p       粘贴

              yy 复制  5yy—复制五次

              p

    4、  glob机制---文件名通配符的机制

    $(ls /var/log)

    /var/log/*.log

             Test命令总结:

    (1)      test的命令的option的-a,-o只在命令中使用

    du命令 -h    du -h filename

    例如 [ `du -h  $file |cut -d: -f1` -lt 100K -a -x $file ]

    注意:做字符串匹配的时候,不支持正则以及通配符

    (2)      test test == [[  ]]

    再连接两个test的命令的时候,不能使用命令内部的option -a -o

    一般使用 || && == != >= <=

    [[ yum.log ==*.log ]]

    5、  变量引用—传参

    $@ $* 将参数作为for循环的列表

    $0—和awk不一样

             bash中$0代表其运行的脚本文件

             awk中$0代表整行的内容                     ----awk是按行执行

    需要多个词的时候”$@”,需要一个词的时候用”$*”

    IFS-------是分隔符

    keepalived –主备 需求:每一个小时去匹配一下主备设备的keepalived的配置文件是否相同

                      安全:1.加密 2.校验 3.原认证 4.证书认证(不可否性)

    1. 校验:hash

    扩展:for语句的另外一种写法

    基于C语言格式的for语句的写法:

              for 变量 in列表;do

                       循环体

              Done

             

              for((i=0;i<=10;i++));do

                       循环体

              Done

              for((初始条件语句;条件判断语句;初始值变化语句));do

                       循环体

              done

    99乘法表:

              for((i=1;i<=9;i++));do

                       for((j=1;j<=$i;j++));do

                                echo -n -e “$i*$j=$(($i*$j)) ”

                       done

                       echo “ ”

              done

    优点:不宜进入死循环

    While语句的格式:

    定义初始值----i=0

    while 条件;do

              循环体

              Let i++ //注意 初始值的变化

    done

  • 相关阅读:
    struts2+hibernate+Spring分层开发
    (江苏大学)校园网上网帮助工具开发详解(附源码)【行政教学区】【城市热点】
    [CLR的执行模型].NET应用程序是如何执行的?
    ASP.NET服务器对于请求的处理过程
    【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
    ASP.NET 页生命周期和页面事件处理管道
    【分析总结】ASP.NET中的状态管理原理
    【CLRsos调试】关于方法表继承调用问题的总结
    【分析最原始验证码生成】HTTP请求处理程序
    [ASP.NET]Session在多个站点之间共享解决方案
  • 原文地址:https://www.cnblogs.com/KAJIA1/p/11392337.html
Copyright © 2020-2023  润新知