• shell笔记_read与for语句循环


    交互输入与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="zhangjie" 

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

                         |                                   |

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

                         |             |                     |                              |

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

                 

           练习:输入一个设备文件,输出这个设备文件的基本信息;            

           #!/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

       3. 列表的生成方式:

    • 直接给出字符串列表

           for i in a b c d e ;do

                  循环体

           done

    • 整数列表

                  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”

    • 返回列表的命令

                  $(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命令总结:

                       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

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

                        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

  • 相关阅读:
    在Eclipse或者STS中使用SVN插件
    SVN的忽略、版本回退、版本冲突(window)
    SVN的图标集
    HTML5+NodeJs实现WebSocket即时通讯
    import和require的区别
    正则表达式 金额验证
    vue 弹窗弹窗禁止滑动的方法 看了网上很多方法 都是扯淡 直接贴上代码
    uni-app关于小程序及app端第三方微信登陆问题
    用 async/await 来处理异步
    微信小程序 子组件调用父组件方法
  • 原文地址:https://www.cnblogs.com/baocx/p/11400674.html
Copyright © 2020-2023  润新知