zoukankan      html  css  js  c++  java
  • shell 脚本——第五节课 交互输入read与for语句

    交互输入与for语句

    一、交互输入read

      read input()

      read 命令同可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;
      如果默认值过多,最后所有的值都会被赋予给最后一个变量;
      如果默认值过少,多余的变量则为空值;

      示例:
        read a b c
        aa bb cc

      read如何输入:
        echo "请输入一个目录:"
        我们需要echo -n 取消换行符号
        echo "请输入一个目录:";read变量
        请输入一个目录:etc

        常用参数:
          -p
          read -p "请输入一个目录:"变量
          -t 定义超时时间
          read -t 5 -p "请输入一个目录:"变量

          

      练习题:输入一个设备文件,输出这个设备文件的基本信息;
      #!/bin/bash
      #
      read -t 5 -p "输入一个设备文件名:" devname
      [-z $devnaem] && devname= `fdisk -l`

      if [-b $devname];then
        fdisk -l $devname
        exit ()
      else
        echo"$devname 不是设备文件"
        echo"Usage:"
      fi

     

    二、for语句循环

      回顾:文件判断脚本;
      #!/bin/bash
      #
      read -p "输入一个文件名:"name
      if[-z $name];then
        echo "Usage:'输入一个文件名:/etc/fstab'"
        exit 1
      fi

      if[! -e $name];then
        echo"提示:输入的文件不存在!!fool"
      exit 2
      elif[-f $name];then
        echo"$name is a file"
      elif[-d $name];then
        echo"$name is a dir"
      elif[-b $name];then
        echo"$name is a block file"
      elif[-L $name];then
        echo"$name is a Link file"
      else
        echo"$name是其他文件类型"

      case语句
        case语句的语法格式:
        case变量in
        PATTEN1)
          代码块1
          ;;
        PATTEN2)
          代码块2
          ;;
        *)
          代码库
        esac
    --------------------------------------------------
      for语句的应用场景:
        有一个功能,这个功能需要循环执行,知识执行对象不同;【对象必须是同类数据】
      for 语句格式:
        a=['a','b','c'] --在python程序中,我们很多情况下,需要调用相应的方法去生成列表;
        for变量in列表:do
          循环体
        done
      99乘法表:
        {1..9}
        #!/bin/bash
        #
        for i in `seq 9`;do
          for j in `seq 9`;do
            [$j -le $i] && echo -n -e "$i*$j=`echo $(($i*$j))` "
          done
          echo " "
        done

        #!/bin/bash
        #99乘法表
        for i in {1..9};do
          for j in $1;do
            echo -n -e "$j*$i=$[$i*$j] "
          done
          echo
        done


      echo -e
        -e:使echo命令,能够识别 特殊字符;
         :回车不换行
         :换行符
         :制表符 tab = 4个空格

      unix2dos -->
      dos2unix


      列表生成方式:
      1、直接给出字符串列表
      for i in a b c d e ;do
        循环体
      done
      2、整数列表
        a{start...end} //{1..1}是不行的 {1..9} == python range{1,100}
        b seq 命令引用 $(seq [start[step]] end)
          步长 python range{1,100,2}
          seq 20 30

        题目:写一个for循环--遍历
        #!/bin/bash
        #ping遍历
        declare -i sum=0

        for i in $(seq 1 254);do

          ping -c l -w 1 10.6.12.$i &> /dev/null
          if [$? -eq];then
            let sum++
            echo "10.6.12.$i 是通的"
          fi
        done
        echo "总共有$sum 台电脑在线"


        题目:1到100的偶数和
        #!/bin/bash
        #偶数和


        declare -i sum=0

        for i in $(seq 0 100 2);do
          let sum+=$i
        done

        echo "总数为:$sum"

     

     

     

      3、返回列表的命令
        $(COMMAND)
        应用场景:ls /var/log/


        题目:判断/var/log的所有文件,以.log结尾的文件统计处理,并显示:
        #!/bin/bash
        #
        declare -i sum=0

        for i in $(ls /var/log/);do
          if["*.log" = $i];then
            echo$i
            let sum++
          fi
        done

        echo "统计.log结尾的文件有: $sum"

        题目:netstar -tan 查看网络状态,统计LISTEN 出现的状态次数、ESTABLISHED出现的状态次数、出现的状态次数
        #!/bin/bash
        #统计

        declare -i L=0
        declare -i E=0
        declare -i O=0

        for i in $(netstat -tna | grep "^tcp" | awk '{print $6}');do
          if [$i = LISTEN ];then
            let L++

          elif [$i = ESTABLISHED ];then
            let E++

          else
            let O++

          fi
        done
        echo "监听的链接有:$L"
        echo "其他链接:$E"
        echo "建立的链接有:$O"

        vim 常见用法:
          命令模式:
            dd 剪切
            5dd
            p 粘贴
            yy 粘贴
            5yy

      4、glob机制 -- 文件名通配符的机制
        $(ls /var/log/)

        /var/log/*.log

        test命令总结:
          1、test的命令的option的 -a -o 只在命令中使用;
            例如 [ `du -h $filename | cut -d: -f1`-lt 100k -a -x $filename]
              test `du -h $filename | cut -d: -f1`-lt 100k -a -x $filename
            注意:做字符串匹配的时候,不支持正则以及通配符

          2、test test ==[[ ]]
            再连接两个test的命令的时候,不能使用命令内部option -o -a
            一般使用 || && == != >= <=
            [[yum.log == *.log]]

     


        5、变量引用
          $@ $* 将参数做为for循环的列表
          $0 -- 和 awk 不一样
            bash中$0代表运行的脚本文件;
            awk中$0      --- awk 按行执行


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

     

     

     

     

     

     

     

     

  • 相关阅读:
    检测服务器是否开启重协商功能(用于CVE-2011-1473漏洞检测)
    Wireshark解密HTTPS流量的两种方法
    text2pcap: 将hex转储文本转换为Wireshark可打开的pcap文件
    Hibernate框架(五)Hibernate主键生成策略
    HIbernate框架(四)实现添加操作
    Hibernaete框架(三)搭建hibernate环境(重点)
    Hibernate框架(二)什么是orm思想(重点)
    Hibernate框架(一)Hibernate框架是什么?
    拦截器和过滤器的区别
    谈谈java中遍历Map的几种方法
  • 原文地址:https://www.cnblogs.com/zwl123456/p/11360061.html
Copyright © 2011-2022 走看看