zoukankan      html  css  js  c++  java
  • 学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

              ;;

            *)

          

  • 相关阅读:
    大道至简——一个例子讲清楚观察者模式
    博客园界面代码风格自定义设置
    前端资源网址大集合
    如何检测浏览器是否安装了Adblock,uBlock Origin,Adguard,uBlock等广告屏蔽插件
    WebUploader 上传插件结合bootstrap的模态框使用时选择上传文件按钮无效问题的解决方法
    js中+号的另外一种用法
    C++ 最简单的日志类
    树莓派入门(3)—— 基本配置
    树莓派入门(2)——安装系统
    树莓派入门(1)——准备工作
  • 原文地址:https://www.cnblogs.com/zrxuexi/p/11358874.html
Copyright © 2011-2022 走看看