zoukankan      html  css  js  c++  java
  • shell脚本的for循环与read

    交互输入与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个空格
    --------------------------------------------------------------------------------------------------------------------------------
    列表的生成方式:

    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

  • 相关阅读:
    Android深度探索--第三章读后感
    Android深度探索--第二章读后感
    Android深度探索--第一章读后感
    android深度探索第十章心得体会
    android深度探索第九章心得体会
    android深度探索第八章心得体会
    深度探索android第七章
    Android 深度探索第六章
    深度探索android第五章
    Android深度探索第四章读后感
  • 原文地址:https://www.cnblogs.com/wangshilin/p/11365188.html
Copyright © 2011-2022 走看看