• read与for语句循环


    1、交互输入

    input() 用于python

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

    示例:

    read a b c

    aa bb cc

    read如何输入:

    echo“请输入一个目录:”

    echo -n 取消换行符

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

    请输入一个目录:/etc

    常用参数:

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

    -t   定义超时时间   read -t 2 -p  “请输入一个目录:”变量

    脚本默认值

    [ ! -n $filename ] &&

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

    |                                   |

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

    |           |                       |                  |

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

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

    #!/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语句循环

    回顾:文件判断脚本;

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

       应用场景:有一个功能需要循环执行只是执行对象不同,对象必须是同类数据

    语句格式:

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

    题目:1100的偶数和

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

    vim 常见用法:

    命令模式:

    dd  剪切

    5dd

    p    粘贴

    yy  复制

    5yy

    p    粘贴

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

    $(ls /var/log/)

    /var/log/*

    test命令总结:

    1test的命令的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

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

    2test test ==  [[  ]]

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

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

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

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

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

    vim a.sh
    #!/bin/bash
    #
    for i in $@;do
    循环体
    done

    ./a.sh a b c d e 1 &


    扩展:for语句的另外一种写法:
    基于c语言格式的for语句写法:
    for 变量 in 列表;do
    循环体
    done
    优点:不易进入死循环


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

    while语句的格式
    初始值
    while 条件 ;do
    循环体
    let i++ //变化初始值
    done

  • 相关阅读:
    cocos2dx遇到的一些坑
    cocos2dx场景切换的坑
    整合quickx到普通cocos2dx
    Hadoop、spark
    Redis高级特性及应用场景
    wpf相关好资源
    MVVM模式的几个开源框架
    ASP.NET的IIS映射
    NET 开发者必备的工具箱
    C#开源汇总
  • 原文地址:https://www.cnblogs.com/bishuyu/p/11397972.html
Copyright © 2020-2023  润新知