学shell的第五天

交互输入与for语句

1、交互输入

      read   和input()一个效果

      read   a  b   c

         aa bb  cc

      read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;

      如果默认值过多,最后所有的值都会被赋予给最后一个变量;

      如果默认值过少,多余的变量则为空;

      read如何输入:

            echo“请输入一个目录:”

              我们需要echo -n 取消换行符号

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

              请输入一个目录:/etc

              常用参数:

             -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符

              -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。

              -p 后面跟提示信息,即在输入前打印提示信息。

              -e 在输入的时候可以使用命令补全功能。

              -n 后跟一个数字,定义输入文本的长度,很实用。

              -r 屏蔽,如果没有该选项,则作为一个转义字符,有的话 就是个正常的字符了。

              -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。

              -t 后面跟秒数,定义输入字符的等待时间。

              -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

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

                  -t 定义超时时间

                   read -t 5 -p "请输入一个目录:"变量

               脚本默认值

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

                      |                     |

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

                      |          |          |      |

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

for语句

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

  for语句格式:

      for 变量 in 列表;do

          循环体

      done

      99乘法表:

          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

    这里补一下echo的参数:

              -e :使用echo命令,能够识别特殊字符

                 回车不换行

               换行符

               制表符tab = 4个空格

      列表生成方式:

      1、直接给出字符串列表

      2、整数列表b

            a{start..end}

            b seq 命令引用 $(seq[seq [seq]]end)

      3、返回列表的命令

            $(命令)

          例子:统计/var/log/的所有日志文件,并显示

          for i in $(ls /var/log);do

            if ["*.log" = $i];then

                echo $i

                 let sum++

             fi

          down

          echo "*.log结尾的文件有:$sum"

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

            $(ls /var/log)

            /var/log/*

            示例:同上脚本功能

      5、变量引用

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

            $0---和awk不一样

              bash中$0代表运行脚本文件;

               awk中$0整行内容      ----awk按行执行

小节:test命令总结:

      1、test的命令的参数 -a -o只能在命令中使用

        例如:[`du -h $filename|cut -d: -f1` -lt 100k -a -x $filename]

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

      2、test test==[[  ]]

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

        例子:[[yum.log == *.log]]            

 

case语句

     case语句的语法格式:

     case 变量 in

      PATTEN1)

          代码块1

          ;;

      PATTEN2)

          代码块2

          ;;

        *)

      

原文地址:https://www.cnblogs.com/zrxuexi/p/11358874.html