本篇博客介绍的是shell中数组与正则表达式的作用以及它们的用法 . 每门语言都有属组与正则表示 , shell也不例外 , 首先我们来看看数组的作用和用法 :


     一 . 数组


    数组 , 由名而意就是一组数字 . 当需要赋值100个变量的时候 , 就要定义100个变量名并赋值给它们 , 而用数组的话使用一个名称就可以了 , 在数组后跟100个值 , 访问数组的时候需要使用下标的方式 .

 

    1 . 数组的声明

 

        declare  -a   数组名         #声明数组为数组类型

        declare  -i    变量名         #声明变量为整数数字类型

        declare  -x    变量名         #声明变量为环境变量

        declare  -i    变量名         #声明变量为readonly类型 , 只读类型 , 变量的内容不可改


    2 . 定义数组(变量值称为数组的元数)


        方法一 : 一次赋一个值  格式: 数组名[下标]=值

                    array[0]=1

                    array[1]=2

                    array[2]=3


        方法二 : 一次赋多个值   格式: array=(值1 值2 值3 ..)

                    array=(1 2 3 4 ..)

 

        取消数组 : unset  数组名


     3.访问数组


         echo  ${array[0]}                                          #访问数组中的第一个元数

         echo  ${attay[*]}  或 echo  ${array[@]}         #访问数组中的所有元数 , 数组的遍历 , 

         echo  ${#attay[*]}  或 echo  ${#array[@]}         #访问数组中的所有元数 , 数组的遍历 

         echo  ${array[@]:1}                                        #从数组的下标1开始访问

         echo  ${array[0]:1:2}                                       #从数组的下标1开始 , 访问2个元数


         实例 : 定义一个名为array的数组 , 数组的成员有 1 2 3 4 5

                 image.png


           用数组写一个shell脚本 , 例如查看水果价格:

           要求 : 输入苹果 , 显示苹果5元一斤 , 输入香蕉 , 显示3元一斤 , 输入橘子 , 显示3元一斤 ; 如果输入的不是这三种水果 , 就提示只能查询苹果 , 香蕉 , 橘子

            vim  /cai.sh      #编辑一个名为cai的脚本 , 内容如下

            image.png

            

            保存退出 , 使用 bash  /cai.sh 命令来运行脚本 , 结果为 :

            image.png


            这只是一个非常简单的脚本  , 还可以在脚本中加入while 让用户一直输入查寻水果名




            

     二 . 正则表达式


      正则表达式 : 真确的规则表达式 , 是用来做关键字匹配的 , 它是一种字符模式 , 是在匹配文本时使用一些特殊的符号来匹配用户想要的东西 , 类似于bash来匹配文本

      

      正则表达式与通配符的区别为 :应用的场合不同

      通配符 : 是用在查找文件名时*或?或[关键字]来匹配文件名中不确定达到字符 , ls /dev/tty[135]?
      正则表达式 : 是用在查看文件内容时 ^ , $ , + , * , ? , [] ,等符号来匹配文件内容中不确定的字符  


      能够使用正则表达式的命令 : vim , grep , sed , awk


     基本正则表达式元字符

 

     1 . 字符的匹配

元字符功能例子匹配结.果
.匹配任意单个字符/l.velove , live ..
[]匹配一组字符中的任意一个/l[Oo]ve/love , lOve
[^]
表示取反/[^a-d]ove/
匹配除了aove , bove , cove , dove 之外的所有

     

     2 . 次数的匹配 

元字符功能例子匹配结.果
*匹配*号左边的所有字符/l*ve/lve , llve ,l//llve..
x\{m\}x(字符), m(数字),匹配xx出现m次
/a\{3\}/aaa
x\{m,\}匹配x出现至少m次/a\{2,\}/
aa , aaa ,aaaa , .....
x\{m,n\}匹配x出现m次到n次/a\{2,4\}/aa , aaa ,aaaa 

     3 . 位置的定位

元字符功能例子匹配结.果
^行首定位符/^root/匹配以root开头的行
$行尾定位符/bash$/匹配以bash结尾的行
\<词首定位符/\<love/
匹配lovely , lover , lovexx ..
\>词尾定位符/love\>/匹配以love结尾的 , 如xxlove
\转义符号/2\.5匹配结果为2.5