交互输入与for语句

Posted yxq-123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交互输入与for语句相关的知识,希望对你有一定的参考价值。

交互输入与for语句

1、交互输入

  输入:read 变量

  常用参数:

    -p  // 提示

    -t  // 定义超时时间(要写在-p前面)

  脚本默认值:

    当没有输入变量值并想直接向下运行,这时需要默认值;

  输出:echo “”

  常用参数:

    -n  // 取消换行

    -e  // 使echo命令能够识别特殊字符

      常用的特殊字符:\r  \n  \t

2、For语句循环

  格式:

    For 变量 in 列表;do

      循环体

    done

    [对象必须是同类数据]

  列表生成方式:

    21直接给出字符串列表

    22整数列表

      astart ... end

      B seq 命令引用 $(seq [start[step]] end)

    23返回列表命令

      $(COMMAND)

    24glob机制

      示例:同上脚本功能

    2、5变量引用

      $@ $* 将参数作为for循环的列表

3、case语句

     -- 做匹配
        case语句的语法格式:

        case 变量 in
        PATTEN1)
            代码块1
            ;;
        PATTEN2)
            代码块2
            ;;
        *)
            代码库
        esac

   例:

    1)、文件判断脚本

    

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

    2)、九九乘法表

#!/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))`\t" 
    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]\t"
    done
    echo
done    

     3)、写一个for循环,遍历本网络网段中所有up的电脑

#!/bin/bash
# 遍历
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 台电脑在线"    

    4)、求1到100偶数和

#!/bin/bash
# 偶数和
declare -i sum=0
for i in $(seq 0 2 100);do
    let sum+=$i
done
echo “总数为:$sum

    5)、判断 /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` -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循环的列表

以上是关于交互输入与for语句的主要内容,如果未能解决你的问题,请参考以下文章

14 shell脚本--006交互输入与for语句

shell_07--read与for语句

Shell编程之case语句与循环语句

if 语句for循环

shell脚本if语句for循环语句

Day 01 :变量数据类型用户交互if语句循环for循环