zoukankan      html  css  js  c++  java
  • Shell:Day05.笔记

    交互输入与for语句
    1、交互输入
     read  Python中用input()函数,进行输入;
     
     read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;
     如果默认值过多,最后所有的变量则为空值;
     如果默认值过少,多余的变量则为空值;
     
     示例:
      read a b c
      aa bb cc
     
     read如何输入:
      echo "请输入一个目录:"
       我们需要 echo -n 取消换行符号
      echo "请输入一个目录:";read 变量
      请输入一个目录:etc
     
      常用参数:
       -p
       read -p "请输入一个目录:" 变量
       -t 定义超时时间
       read -t 5 -p "请输入一个目录:" 变量
      脚本默认值
       [-n $filename] &&
       filename="why"
       输入内容-----------------------------------
       |        |
       输入是否正确---------                    没有输入------------------
       |              |                      |                      |
       正确                 不正确,给提示     提示必须输入           给出默认值
     
      练习:输入一个设备文件,输出这个设备文件的基本信息;  
     #!/bin/bash
     #
     read -t 5 -p "输入一个设备文件名:" devname
     [ -z $devname ] && fdisk -l && exit 1
     if [ -b /dev/$devname ];then
      fdisk -l /dev/$devname
      exit 0
     else
      echo "$devname 不是设备文件"
      echo "Usage:'请输入一个设备文件,如 sda'"
     fi
     

    2、for语句循环  while until
     回顾:文件判断脚本;
     #!/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是其他文件类型"
     fi 
     
     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 {0..$i} ; 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循环--遍历本网络网段中所有up的电脑
      #!/bin/bash
      # ping遍历
      declare -i sum=0
      for i in $(seq 1 100);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 台电脑在线"
      题目:1到100的偶数和
      #!/bin/bash
      # 偶数和
      
      declare -i sum=0
      for i in $(seq 0 2 100);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"
      题目:netstat -tan 查看网络状态,统计 LISTEN 出现的状态次数、ESTABLISHED出现的状态次数、OTHER 状态出现的次数;
      
      vim 常见用法:
       命令模式:
        dd  剪切
        5dd
        p    粘贴
        yy  复制
        5yy
        p    粘贴
     4、glob机制 -- 文件名通配符的机制
      $(ls /var/log/)
      /var/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循环的列表
     
    case
    while
    until

    keepalived --  主备 需求:每一个小时去匹配一下主备设备的keepalived的配置文件是否相同?
     hash
     安全:1、加密 2、校验 3、原认证 4、证书认证(不可否性)
      2、校验:hash
    函数
    字符串处理
    数组
    sed
    awk
  • 相关阅读:
    BootstrapTable表格数据左右移动功能遇到的问题(数据左右移动,列表拖拽排序,模糊查询列表数据定位)
    MVC校验
    线程
    验证码
    PublicLogic
    进程
    请求处理过程
    上传组件
    委托
    Global全局应用程序类
  • 原文地址:https://www.cnblogs.com/why098/p/11358923.html
Copyright © 2011-2022 走看看