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

      输入内容

2、for语句循环
  文件判断脚本:
    #!/bin/bash
    #
    read -p "输入一个文件名:"name
    if [ -z $name ];then
    echo"usage:输入一个文件名: /etc/fstab"
    exit 1
    fi

    if [ -e $name ];then
    echo"输入的文件不存在!"
    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语句格式:
    在python程序中,我们很多情况下,需要调用响应的方法去生成列表;
    for 变量 in {列表};do
    循环体
    done

99乘法表:
  #!/bin/bash
  #
  for i in `seq 9`;do
  for j in `seq 9`;do
  [ $j -le $i ] && echo -n "$i * $j=echo `$(($i*$j))`"
  done
  echo " "
  done

  for语句循环的另外一种写法:
    基于C语言格式for语句写法:
    for((初始条件;条件判断语句;条件值变化语句));do
    循环体
    done


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

    #
    echo -e
    -e 使echo命令能够识别特殊字符;
    -r 回车不换行
    -n 换行符
    -t 制表符

  列表的生成方式:
    1、直接给出字符串列表

    2、整数列表
    a{start...end} {1..1}这种写法是不行的
    b seq 命令引用 $(seq [start [step] end])
    步长 python range{1.100,2}2表示步长
    seq 20 30

题目:写一个for循环,遍历本网络网段中所有up的电脑
#!/bin/bash
#
declare -i sum=0

for i in $(seq 1 254);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

题目: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 个"

    常见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` -eq -lt 100k -a -x $filename]   
    注意,做字符串匹配的时候不支持正则以及通配符
    2、test test = = [[ ]]
    在链接两个test命令的时候,不能使用命令内部option [-o -a]
    一般使用&& || == != >= <=
      ex:[[ yum.log = = *.log ]]


5、变量引用 - - 传参
    $@ $* 将参数作为for循环的列表
    需要用多个词的时候用"$@"
    需要用一个词的时候用"$*"
    $0 和awk不一样
    bash中$0代表运行的脚本文件
    awk中$0代表整行内容 --awk按行执行

 

posted @ 2019-08-16 17:24  酒友az  阅读(193)  评论(0编辑  收藏  举报