<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    Linux shell程序設計(二).特殊字符
    ?
    ??? 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

    posted on 2009-01-07 22:18 decode360 閱讀(307) 評論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 亚洲欧洲第一a在线观看| 亚洲午夜国产精品无码老牛影视 | 啦啦啦手机完整免费高清观看| 亚洲高清在线观看| 无码日韩精品一区二区三区免费| 亚洲色无码一区二区三区| 一级午夜a毛片免费视频| 亚洲乱码国产一区网址| 国产V片在线播放免费无码| 亚洲国产婷婷综合在线精品| 免费夜色污私人影院网站电影| 亚洲国产成人久久综合野外| 特级毛片在线大全免费播放| 亚洲另类少妇17p| 免费成人在线视频观看| 亚洲日本中文字幕区| 久草视频免费在线观看| 亚洲已满18点击进入在线观看| 最近中文字幕免费mv视频7| 亚洲国产精品无码第一区二区三区 | 国产免费人成视频在线播放播| 亚洲色无码专区在线观看| 无码av免费一区二区三区| 亚洲成人免费在线观看| 国外成人免费高清激情视频| 老妇激情毛片免费| 亚洲国产AV无码专区亚洲AV| 亚洲精品在线免费观看视频| 亚洲欧美乱色情图片| 亚洲裸男gv网站| 57pao国产成视频免费播放| 国产精品亚洲精品青青青| 又粗又大又长又爽免费视频| a级在线免费观看| 久久久久亚洲国产| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 男人天堂2018亚洲男人天堂| 亚洲?V无码乱码国产精品| 免费成人高清在线视频| 亚洲依依成人亚洲社区| 亚洲综合日韩久久成人AV|