zoukankan      html  css  js  c++  java
  • 【转载】关于Linux Shell 特殊字符

    一、通配符
     
     
    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来处理。

  • 相关阅读:
    关于父子页面的交互
    Spring在代码中获取bean的几种方式(转:http://www.dexcoder.com/selfly/article/326)
    关于Zookeeper
    Java 生成pdf表格文档
    Spring 框架中Http请求处理流程
    关于redis
    Xstream 解析xml文件内容
    ArrayBlockingQueue 和LinkedBlockQueue
    spring IOC
    springboot启动过程
  • 原文地址:https://www.cnblogs.com/successliwei/p/3392785.html
Copyright © 2011-2022 走看看