• shell_07--read与for语句


    1、交互输入
       read    Python中用input()函数,进行输入;
       read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;
       如果默认值过多,最后所有的值都会被赋予给最后一个变量;
       如果默认值过少,多余的变量则为空值;
      read如何输入:
          echo "请输入一个目录:"
           我们需要 echo -n 取消换行符号
          echo "请输入一个目录:";read 变量
          请输入一个目录:etc
     
        常用参数:
         -p
         read -p "请输入一个目录:" 变量
         -t  定义超时时间
         read -t 5 -p "请输入一个目录:" 变量
      脚本默认值:
                                                                输入内容
                                             |
                                 -------------------------------------------
                                   |                                                   |
                              输入是否正确                                    没有输入
                                          |                                                   |
                       -----------------------------                        -------------------------------
                      |                                   |                      |                                    |
                 正确                     不正确,给提示     提示必须输入                给出默认值
    练习
    1、输入一个设备文件,输出这个设备文件的基本信息;
    #!/bin/bash
    # Author: lzq
    # Blog: https://home.cnblogs.com/lzqitdl/
    # Time: 2019-08-16 05:26:36
    # Name: text.sh
    # Version: v1.0
    # Description: This is a Script.
        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

    2、文本判断脚本

    #!/bin/bash
    # Author: lzq
    # Blog: https://home.cnblogs.com/lzqitdl/
    # Time: 2019-08-16 05:26:36
    # Name: text.sh
    # Version: v1.0
    # Description: This is a Script.
        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

      for语句的应用场景:
          有一个功能,这个功能需要循环执行,只是执行对象不同;【对象必须是同类数据】

      for语句格式:
        a=['a','b','c'] -- 在Python程序中,我们很多情况下,需要调用相应的方法去生成列表;
     
    for 变量 in 列表;do
         循环体
    done
    for语句实例
    1、九九乘法表
    #!/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
    #方法2
    for in {1..3};do
       for j in (j=1;j<10;j++);do
        #echo -n -e "$i*$j=$[$i*$j] "
        [$j-le $i]&&echo -n -e "$i*$j=$[$i*$j] "
       done
       echo
      done

    补充:

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

      列表的生成方式:

       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 台电脑在线"
    

      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"
    

       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循环的列表
          $0 -- 和awk不一样
           bash中$0代表运行的脚本文件、  
           awk中$0整行内容 --awk按行执行
      
          扩展:for语句另一种用法:
          基于C语言格式的for语句语法:
     #常规用法
    for 变量 in 列表; do 循环体 done

      优点:不易进入死循环
     
    #C语言用法
    for((初始条件;条件判断语句;值变化语句));do 循环体 done
     case 语句 -- 做匹配
        case语句的语法格式:
    case 变量 in
        PATTEN1)
           代码块1
           ;;
        PATTEN2)
          代码块2
           ;;
        *)
           代码库
        esac
    

    while
     while语句格式
     初始值

    while 条件;do
    	循环体
    	let i++ //变化初始值
    done
    

      

     

        


         

  • 相关阅读:
    C语言面试题——寻找错误
    C语言的声明解释的在线工具——cdecl
    C语言面试题——指针运算
    const 指针与指向const的指针
    C语言复杂声明解释
    poj1248
    poj1750
    poj1484
    poj1853
    poj1575
  • 原文地址:https://www.cnblogs.com/lzqitdl/p/11365465.html
Copyright © 2020-2023  润新知