一、通配符
 
 
1、一般通配符
 
    ① * (星号):匹配字符的0次或多次出现
 
    举例:f*可以匹配f、fa、fls.a
    注意:“.”和“/”必须显示匹配
         *file无法匹配.file,必须用.*file
         /etc*.c无法匹配/etc/a.c,必须用/etc/*.c
 
    ② ? (问号):匹配任意一个字符
 
    举例:f?可以匹配fa、f3,但不能匹配f、fa2
 
    ③ [] (一对括号):匹配括号内的字符组
 
    举例:f[abc]可匹配fa、fb、fc
    注意:可以用“-”来表示范围,即f[a-c]和上面的例子是一样的
         另外*和?在[]里面将不再表示通配符,而仅为普通字符
 
    ④ ! (惊叹号):紧跟在[后面,表示不再该范围内
 
    举例:f[!1-9].c用以匹配f后面不是1-9的.c文件,即可以是fa.c
    注意:[]也仅匹配一个字符,即不可能是其中的2个或2个以上
 
2、模式表达式
 
    ① *(模式表):匹配给定表模式0次或多次出现
 
    举例:file*(.c  | .o)将匹配file、file.c、file.o、file.c.c、file.o.c等
 
    ② +(模式表):匹配给定表模式1次或多次出现
 
    举例:file+(.c | .o)将匹配file.c、file.o、file.c.c、file.o.c等,不匹配file
 
    ③ ?(模式表):匹配给定表任何模式的0次或1次出现
 
    举例:file?(.c | .o)只匹配file、file.c、file.o,不匹配file.c.c、file.c.o
 
    ④ @(模式表):仅匹配给定表模式1次 出现
 
    举例:file@(.c | .o)只匹配file.c、file.o
 
    ⑤ !(模式表):出给定表中的一个模式之外,可以匹配任何东西
 
 
 
二、引号
 
 
1、双引号
 
    双引号可以将除了“$”、“`”、“\”外的所有内容作为普通字符处理, 三个例外仍保留特殊功能
 
    “$”:表示变量替换
    “`”:倒引号,表示命令替换
    “\”:转义符,告诉shell不要对$、`、"、\或换行符进行特殊处理
 
    举例:
    $ echo "current directory is `pwd`"  --current directory is /home/wxq/prog
    $ echo "home directory is $HOME"  --home directory is /home/wxq
    $ echo "file*.?"  --file*.?
    $ echo "home directory is \$HOME"  --home directory is $HOME
    $ echo "directory '$HOME'"  --directory /home/wxq
 
2、单引号
 
    单引号中的任何字符均作为普通字符,例如:
    $ echo 'echo "directory is $HOME"'  --echo "directory is $HOME"
 
3、倒引号
 
    倒引号括起来的字符串被shell解释为命令,用运行命令后的返回信息代替这个引号内容。
 
    举例
    $ today=`date`
    $ echo Today is $today
    --Today is Fri Feb 20 08:59:01 CST 2009
 
    $ Nuser=`echo The number of users is \`who|wc -l\``
    $ echo $Nuser
    --The number of users is 1
 
 
 
三、输入/输出重定向
 
1、输入重定向符
 
    “<”:将命令的标准输入重新定向到指定文件,例如:
    $ bash < file1
    即将file1中的所有语句使用bash命令全部重新执行一遍
 
2、输出重定向符
 
    “>”:将命令的标准输出重定向到指定文件,例如:
    $ date > abc
    这样屏幕上不再显示date命令的结果,而全部保存到文件abc中
    $ ex2 > abc
    shell脚本的执行结果也可以输出到文件abc中
 
    注:不但可以输出到普通文件,还可以对应I/O设备,例如:
        $ cat f1.c > /dev/lp0  --在并行打印机上打印
 
3、输出附加定向符
 
    “>>”:将输出内容附加到原来文件的后面,不破坏原来的内容。例如:
    $ ps -l >> psfile
 
4、即时文件定向符
 
    “<<”:将输入行重新定向到一个命令中,例如:
    $ bash << %%
    ls
    date
    %%
   
    注:必须以一对标记符来标注输入的内容,如上例中为%%
 
5、与文件描述字有关的重定向
 
    “n>”“n>>”:将特定类型的文字描述输出到文件中,例如:
    $ gcc m1.c 2 > errfile
    表示将对m1.c的编译过程中产生的错误放入文件errfile中
 
    注:0代表输入、1代表输出、2代表错误输出,另外还有3-9
 
    另注:输入输出定相符可以同时使用,如: $ wc -l < infile > outfile
 
 
 
四、注释、管道线和后台命令
 
1、注释
 
    “#”:以#开头的正文行表示注释
 
    注:如果脚本第一行以#!开头,则后面接所使用shell的绝对路径
 
2、管道线(过滤器)
 
    “|”:表示前一个命令的输出正好是后一个命令的输入,例如:
    $ ls -l | wc -l
 
    ls输出所有当前路径下文件夹及文件名称,再由wc命令统计行数
 
3、后台命令
 
    “&”:在每条命令最后加上&,表示该命令为后台命令,例如:
    $ gcc m1.c&
 
    注:后台执行的意义在于,后台程序仅在CPU有空闲时执行,可以提高系统效率
 
 
 
五、命令执行操作符
 
1、顺序执行
 
    “;”:在同一行中使用分号将各个命令隔开,表示顺序执行,例如:
    $ pwd; who |wc -l; cd /usr/bin
 
    注:执行时从左至右,前面命令成功与否不影响后面
 
2、逻辑与
 
    “&&”:把两个命令连载一起,若前面的成功则执行后面的,例如:
    $ cp aaa bbb && rm aaa
 
    注:&&可以把多个命令都连起来,但是只要只要中间任何一个未执行成功,后面的就均不执行
 
3、逻辑或
 
    “||”:如果前面的不成功,则执行后面的,例如:
    $ cat aaa || pwd  --如果不能把abc内容列出,则显示当前目录路径
 
    注:||也可以连接多个命令,且与&&优先级相同,但都低于|和&
 
 
 
六、成组数据
 
1、{ }形式
 
    以{}括起来的全部命令视为一条命令,出现在管道的一边。例如:
    $ { echo "User Report for `date`."; who;} | pr
 
    上例的作用就是可以将echo和who两个命令的结果,一起传输给pr
 
    注意:{后面必须要有一个空格,}前必须要有分号,另外{}内的内容可以多行。
 
2、( )形式
 
    ()可以完成与{}一样的效果,而且无需加空格和分号
 
    注:()和{}有本质的区别是:()会生成新的子shell进程,而不会改变父shell的变量值及工作目录
 
    $ a="current values";export a
    $ echo $a
    current values
    $ (a="new value-1";echo $a)
    new value-1
    $ echo $a
    current values
    $ { a="new value-2";echo $a;}
    new value-2
    $ echo $a
    new value-2
    $ pwd
    /opt/test
    $ (cd /bin;pwd)
    /bin
    $ pwd
    /opt/test
    $ { cd /bin;pwd;}
    /bin
    $ pwd
    /bin 

-------

最后补充一下:

关于%, 需要再加一个%,变成%% 让SHELL来处理。

【转载】关于Linux Shell 特殊字符的更多相关文章

  1. Linux shell批量执行scp脚本工具

    转载: linux shell + expect:批量scp脚本工具             2011-09-13 15:51:06 分类: Python/Ruby 最近在准备一个部署的任务,其中有一 ...

  2. 阿里Linux Shell脚本面试25个经典问答

    转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...

  3. Linux shell中的一个问题 ${}带正则匹配的表达式

    目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解.后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式.故记录下来,以备后来查阅. 问题: 在某 ...

  4. Linux Shell中单引号、双引号、反引号的区别【转载】

    linux shell可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符` 1. 单引号 ( '' )# grep Susan phonebook Sus ...

  5. linux shell sleep/wait(转载)

    linux shell sleep/wait(转载) 2007-04-27 18:12 bash的基本配置是由配置文件组成的./etc/profile称之为shell的全局配置文件.另外一个文件在个人 ...

  6. 转载-Linux Shell 数组建立及使用技巧

    转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html 如侵犯版权,请联系我删除 linux shell在编程方面比win ...

  7. linux shell命令之wc/split及特殊字符

    [时间:2018-07] [状态:Open] [关键词:linux, wc, split, 通配符,转义符,linux命令] 0 引言 整理这篇文章的目的不是为了什么学习,仅仅是为了强化下记忆,以便下 ...

  8. linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载

    http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html nux shell有一套自己的流程控制语句,其中包括条件语句(if),循环 ...

  9. Linux shell的&&和||--转载

    Linux shell的&&和||   shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中.当 $? == 0 时,表示执行成功:当 $? ...

随机推荐

  1. 移动端自动化环境搭建-JDK的安装

    一.安装jdk A.安装依赖 JDK作为JAVA开发的环境,不管是做JAVA开发的学生,还是做安卓开发的同学,都必须在电脑上安装JDK. B.安装过程 安装JDK 选择安装目录 安装过程中会出现两次 ...

  2. 基于WDF的PCI/PCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)

    原文出处:http://www.cnblogs.com/jacklu/p/4687325.html 本篇文章将对PCIe驱动程序的源文件代码作详细解释与说明.整个WDF驱动程序工程共包含4个头文件(已 ...

  3. Objective c, +load, +initialize 方法

    +load() 当类被加载入程序的时候会执行+load方法 +initialize() 当类第一次被使用的时候会执行+initialize方法 这两个方法都只会被执行一次.

  4. Spring JDBC常用方法详细示例

    Spring JDBC使用简单,代码简洁明了,非常适合快速开发的小型项目.下面对开发中常用的增删改查等方法逐一示例说明使用方法 1 环境准备 启动MySQL, 创建一个名为test的数据库 创建Mav ...

  5. 深入理解js——prototype原型

    之前(深入理解js--一切皆是对象)中说道,函数也是一种对象.它也是属性的集合,你也可以对函数进行自定义属性.而JavaScript默认的给了函数一个属性--prototype(原型).每个函数都有一 ...

  6. (十一) 一起学 Unix 环境高级编程 (APUE) 之 高级 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. eclipse构建及运行maven web项目

    1:环境 eclipse indigo, JDK1.6, maven 3.2.1, tomcat7.0.42 2:安装eclipse maven插件 m2eclipse 第一种方法:从网上下载m2ec ...

  8. rhel7系统破root开机密码

    破密码: 开机菜单栏第一栏按e,在linux16行尾,加入rd.break console=tty0 ctrl +x继续启动 mount -o remount,rw /sysroot #重新挂载sys ...

  9. 第二次作业#include <stdio.h> int main() { int a,b,c,d,e; printf("请输入一个不多于五位的整数:\n"); scanf("%d",&a); if(a>=100000||a<=0) { printf("输入格式错误! \n"); } else { if(

    1 判断成绩等级 给定一百分制成绩,要求输出成绩的等级.90以上为A,80-89为B,70-79为C,60-69为D,60分以下为E,输入大于100或小于0时输出"输入数据错误". ...

  10. ADB理解

    在做手机测试时候,经常用到的命令就是adb.如adb shell,adb devices,adb logcat等等 那么什么是adb,怎么用呢? 一.adb adb的全称为Android Debug ...