shell脚本【符号4】通配符的使用

标签: 通配符
8人阅读 评论(0) 收藏 举报
分类:

这篇博客介绍

1、通配符的使用,

2、“[ ]”和“[[ ]]” 的其它用法(作为test命令的简写)

 通配符: *  ?  [ ]     [ !  ]    [^   ]

:使用元字符进行模式匹配,搜索文件

        ⒈ 按照匹配的字符数量,这些通配符大致分为两类:

        一类是匹配任意数量的字符:*

        一类是匹配单个数量的字符:?   [  ]    [ !  ]    [^  ]

       ⒉ 在匹配单个数量字符的通配符中,按照匹配的范围,可分为:

             任意匹配:?

             都是加了范围的匹配:[  ]     [!  ]     [^ ] 

       ⒊ 八种典型应用举例:

        ①、命令:ls –l [a-c]*

        头字符是a,b,c中间的一个,剩下的任意匹配

        ②、命令:ls –l musi?            (匹配music文件)

              只匹配最后一个字符。当然可以匹配任意位置的字符

         ?用来匹配单个字符,还可以用这种:ls –l m?s??

         注意的就是“?”用来匹配单个字符

        ③、命令:ls –l [su]*

               列出当前目录中以s或u为首字符的所有文件

               [ ] 是用于限定搜索单个字符的范围

        ④、命令:ls –l s* u*

         表示列出当前目录中首字母为s首字母为u的所有文件

        ⑤、命令:ls –l s*u*  

                s*u*中间不加空格

          匹配以s为首字母,中间有u字母的所有文件

               *可以出现在任何位置,比如:echo *.c

          其实上一句没有什么特别的含义,“.c”也只是文件名的一部分,非后缀

          并且注意和第4条的对应

        ⑥、命令:ls –l  [ ! a-z]*

         符号“!”表示取反,不取a-z中的任何字符

         这条命令和命令:ls –l [^a-z]*  是一样的

         !和^在这个里面作用是一样

         注意和第1条对应

        ⑦、命令:ls –l ?   或  ls –l *

              作用: 一个是输出文件名只有一个字符的文件

                        一个是输出目录下所有的文件

         注意的点是:如果匹配不到文件,比如当前目录为空。则?和*会直接传给命令作为输入参数。

              问:为什么要注意直接传入问题?以下面例子为例

                    例子:echo xx\\*\*yy

                    输出:xx\**yy

                    分析:输出的\是由\\输出打印的,输出的第二个*是由\*输出打印的,中间的*,可能就是一个*,因

            为没有匹配文件,所以原样输出了。至于对不对,在下面有校验:

                    校验:可以使用一个例子来检验一下分析是否正确

                    创建文件:echo hello >tes*abcd*yy

                    进行检测:echo tes\**\*yy;  echo tes\\*\*yy

                    输出:tes*abcd*yy     (匹配了文件)

                              tes\**yy           (\\和\*输出了,至于中间这个*,保持原样)

                    结论:上面分析是对的

        ⑧、命令:echo .*

        作用:匹配以”.”为起始字符的隐藏文件名,列出所有的隐藏文件

 

二:当作一种命令---test命令的简写

        test命令

      ⑴ 作用:用来检测文件属性和状态,比较两文件的区别;字符串操作,字符串比较;数值比较,表达式比较,最终返回出口状态(0或1)。

        ⑵ 为什么test命令非常适合作为控制循环结构的判断命令:

        方便的文件、字符、数值间比较功能,以及出口状态的返回值是它非常适合作为判断条件语句的根本原因。

     至于详细操作,可以通过help test >testManual,详细查看test命令的各种operators.

        ⑶  test命令的简写:[  ]或 [[  ]]

        就是把test命令后面的operators,用方括号阔起来罢了。

            注意:方括号内侧和表达式之间必须要加空格

       在shell脚本中,需要使用[[  ]],因为有时可以避免逻辑错误。

          “[[  ]]” 中可以使用“&&”,“||”,“<”,“>”等运算符;但在“[  ]”中,使用这些运算符就会出错。

         ⑷ 举例:

         功能:测试[[ ]]的功能

         代码:

                   while $([[ m = m ]])

                   do

                            echo hello

                   done

         分析:[ m = m ]也是命令,所以可以用$( )进行命令替换

        注意的是:while检测的是命令的出口状态。所以:

       ① while [[ m = m ]]  ② while `[[ m = m ]]`  ③ while $([[ m = m ]])是一样的。

         其中②是反引号。上面三种对于while检测来说是一模一样的。②③这两种,甚至可以说他们写法有点多余。因为,完全不需要做引用或命令替换。引用或命令替换是发生在一些命令在双引号里面或echo命令或其它地方,命令可能不执行的情况,但又需要它执行,并引用命令的标准输出的情况。测试语句又没有标准输出,只有状态输出,所以,用命令替换有点多余。

 

            test命令的详细解析可以看另一篇文章:test命令的用法

查看评论

linux的shell脚本的通配符使用方法

#!/bin/bash #author: ***** #date : #Email : ****@***# 通配符 # # ? 任意单个字符 # * 任意0个或多个字符 # [ ] 匹配方括...
  • u011402596
  • u011402596
  • 2016-01-07 23:49:56
  • 3104

shell 脚本关闭通配符

有时需要输出类似这样的"***************" 特殊字符,但是通过这样下面这样的方式是显示不出来的。 tt="**********" echo $tt 原因就是因为shell默...
  • wangbole
  • wangbole
  • 2013-01-29 15:50:19
  • 1688

shell脚本学习--符号

一、shell简单介绍      shell的作用是解释执行用户的命令,用户输入一条命令,shell就解释一行【交互式】。另一种执行命令的方式是【批处理】,用户事先写一个shell脚本,其中有很多条...
  • Sekai_Z
  • Sekai_Z
  • 2016-08-14 21:10:19
  • 784

shell脚本中的一些符号

在shell中常用的特殊符号罗列如下:  # ;   ;; . , / \\ 'string'| !   $   ${}   $? $$   $*  \"string\"* **   ? ...
  • qq_31550425
  • qq_31550425
  • 2016-12-12 14:55:58
  • 729

《shell中的通配符,特殊字符和正则表达式》

1. shell支持的通配符 2. shell中的特殊字符(以bash为例) 3. 正则表达式
  • miss_acha
  • miss_acha
  • 2015-03-03 14:04:27
  • 6260

通配符与特殊符号

万用字符与特殊符号 符号 内容 * 万用字符,代表0或多个字符(数字) ? 万用字符,代表一个字母 # 批注,这个最常被使用在script当中,视为说...
  • rebelqsp
  • rebelqsp
  • 2014-01-27 15:58:31
  • 1207

struts2动态方法调用和使用通配符定义action

struts.xml: /WEB-INF/page/addEmployee.js
  • xzf19901108
  • xzf19901108
  • 2012-07-23 10:10:31
  • 824

Shell下的通配符、特殊符号和文件描述符

一:通配符 * 代表『 0 个到无穷多个』任意字符  示例:找出 /etc/ 底下以 cron 为开头的文件名的文件 [root@instructor Desktop]# ls /etc/cro...
  • siyanyanyanyai
  • siyanyanyanyai
  • 2014-04-18 15:40:24
  • 1800

split使用总结,被坑的正则特殊符号:*/+

最近学习安卓的过程中,用到字符串分解,使用split,被zhengz
  • z745968621
  • z745968621
  • 2014-09-05 10:18:09
  • 1012

Java中“泛型之泛型类、泛型方法“和'泛型通配符"的应用总结

从Java代码到Java堆---Java代码内存使用情况的深入见解 简介: 本文将为您提供 Java™ 代码内存使用情况的深入见解,包括将 int 值置入一个 Integer 对象的内存开销、对象委...
  • zolalad
  • zolalad
  • 2013-12-28 18:48:03
  • 4334
    个人资料
    持之以恒
    等级:
    访问量: 1950
    积分: 318
    排名: 24万+
    文章存档