Decode360's Blog

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          一、通配符
          ?
          ?
          1、一般通配符
          ?
          ??? ① * (星號):匹配字符的0次或多次出現(xiàn)
          ?
          ????舉例:f*可以匹配f、fa、fls.a
          ??? 注意:“.”和“/”必須顯示匹配
          ???????? *file無法匹配.file,必須用.*file
          ?????????/etc*.c無法匹配/etc/a.c,必須用/etc/*.c
          ?
          ??? ② ? (問號):匹配任意一個字符
          ?
          ??? 舉例:f?可以匹配fa、f3,但不能匹配f、fa2
          ?
          ??? ③ [] (一對括號):匹配括號內(nèi)的字符組
          ?
          ??? 舉例:f[abc]可匹配fa、fb、fc
          ??? 注意:可以用“-”來表示范圍,即f[a-c]和上面的例子是一樣的
          ???????? 另外*和?在[]里面將不再表示通配符,而僅為普通字符
          ?
          ??? ④ ! (驚嘆號):緊跟在[后面,表示不再該范圍內(nèi)
          ?
          ??? 舉例:f[!1-9].c用以匹配f后面不是1-9的.c文件,即可以是fa.c
          ??? 注意:[]也僅匹配一個字符,即不可能是其中的2個或2個以上
          ?
          2、模式表達式
          ?
          ??? ① *(模式表):匹配給定表模式0次或多次出現(xiàn)
          ?
          ??? 舉例:file*(.c ?| .o)將匹配file、file.c、file.o、file.c.c、file.o.c等
          ?
          ??? ② +(模式表):匹配給定表模式1次或多次出現(xiàn)
          ?
          ??? 舉例:file+(.c?| .o)將匹配file.c、file.o、file.c.c、file.o.c等,不匹配file
          ?
          ??? ③ ?(模式表):匹配給定表任何模式的0次或1次出現(xiàn)
          ?
          ??? 舉例:file?(.c?| .o)只匹配file、file.c、file.o,不匹配file.c.c、file.c.o
          ?
          ??? ④ @(模式表):僅匹配給定表模式1次 出現(xiàn)
          ?
          ??? 舉例:file@(.c?| .o)只匹配file.c、file.o
          ?
          ??? ⑤ !(模式表):出給定表中的一個模式之外,可以匹配任何東西
          ?
          ?
          ?
          二、引號
          ?
          ?
          1、雙引號
          ?
          ??? 雙引號可以將除了“$”、“`”、“\”外的所有內(nèi)容作為普通字符處理, 三個例外仍保留特殊功能
          ?
          ????“$”:表示變量替換
          ??? “`”:倒引號,表示命令替換
          ??? “\”:轉(zhuǎn)義符,告訴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解釋為命令,用運行命令后的返回信息代替這個引號內(nèi)容。
          ?
          ??? 舉例
          ??? $ 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命令全部重新執(zhí)行一遍
          ?
          2、輸出重定向符
          ?
          ??? “>”:將命令的標準輸出重定向到指定文件,例如:
          ??? $ date > abc
          ??? 這樣屏幕上不再顯示date命令的結果,而全部保存到文件abc中
          ??? $ ex2 > abc
          ??? shell腳本的執(zhí)行結果也可以輸出到文件abc中
          ?
          ??? 注:不但可以輸出到普通文件,還可以對應I/O設備,例如:
          ??????? $ cat f1.c > /dev/lp0? --在并行打印機上打印
          ?
          3、輸出附加定向符
          ?
          ??? “>>”:將輸出內(nèi)容附加到原來文件的后面,不破壞原來的內(nèi)容。例如:
          ??? $ ps -l >> psfile
          ?
          4、即時文件定向符
          ?
          ??? “<<”:將輸入行重新定向到一個命令中,例如:
          ??? $ bash << %%
          ??? ls
          ??? date
          ??? %%
          ???
          ??? 注:必須以一對標記符來標注輸入的內(nèi)容,如上例中為%%
          ?
          5、與文件描述字有關的重定向
          ?
          ??? “n>”“n>>”:將特定類型的文字描述輸出到文件中,例如:
          ??? $ gcc m1.c 2 > errfile
          ??? 表示將對m1.c的編譯過程中產(chǎn)生的錯誤放入文件errfile中
          ?
          ??? 注:0代表輸入、1代表輸出、2代表錯誤輸出,另外還有3-9
          ?
          ??? 另注:輸入輸出定相符可以同時使用,如: $ wc -l < infile > outfile
          ?
          ?
          ?
          四、注釋、管道線和后臺命令
          ?
          1、注釋
          ?
          ??? “#”:以#開頭的正文行表示注釋
          ?
          ??? 注:如果腳本第一行以#!開頭,則后面接所使用shell的絕對路徑
          ?
          2、管道線(過濾器)
          ?
          ??? “|”:表示前一個命令的輸出正好是后一個命令的輸入,例如:
          ????$ ls -l | wc -l
          ?
          ??? ls輸出所有當前路徑下文件夾及文件名稱,再由wc命令統(tǒng)計行數(shù)
          ?
          3、后臺命令
          ?
          ??? “&”:在每條命令最后加上&,表示該命令為后臺命令,例如:
          ??? $ gcc m1.c&
          ?
          ??? 注:后臺執(zhí)行的意義在于,后臺程序僅在CPU有空閑時執(zhí)行,可以提高系統(tǒng)效率
          ?
          ?
          ?
          五、命令執(zhí)行操作符
          ?
          1、順序執(zhí)行
          ?
          ??? “;”:在同一行中使用分號將各個命令隔開,表示順序執(zhí)行,例如:
          ??? $ pwd; who |wc -l; cd /usr/bin
          ?
          ??? 注:執(zhí)行時從左至右,前面命令成功與否不影響后面
          ?
          2、邏輯與
          ?
          ??? “&&”:把兩個命令連載一起,若前面的成功則執(zhí)行后面的,例如:
          ??? $ cp aaa bbb && rm aaa
          ?
          ??? 注:&&可以把多個命令都連起來,但是只要只要中間任何一個未執(zhí)行成功,后面的就均不執(zhí)行
          ?
          3、邏輯或
          ?
          ??? “||”:如果前面的不成功,則執(zhí)行后面的,例如:
          ??? $ cat aaa || pwd? --如果不能把abc內(nèi)容列出,則顯示當前目錄路徑
          ?
          ??? 注:||也可以連接多個命令,且與&&優(yōu)先級相同,但都低于|和&
          ?
          ?
          ?
          六、成組數(shù)據(jù)
          ?
          1、{ }形式
          ?
          ??? 以{}括起來的全部命令視為一條命令,出現(xiàn)在管道的一邊。例如:
          ??? $ { echo "User Report for `date`."; who;} | pr
          ?
          ??? 上例的作用就是可以將echo和who兩個命令的結果,一起傳輸給pr
          ?
          ??? 注意:{后面必須要有一個空格,}前必須要有分號,另外{}內(nèi)的內(nèi)容可以多行。
          ?
          2、( )形式
          ?
          ??? ()可以完成與{}一樣的效果,而且無需加空格和分號
          ?
          ??? 注:()和{}有本質(zhì)的區(qū)別是:()會生成新的子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





          -The End-

          posted on 2009-01-07 22:18 decode360-3 閱讀(873) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 平潭县| 巴彦县| 瓦房店市| 庆城县| 赣榆县| 香港 | 澄城县| 分宜县| 城固县| 津市市| 绥德县| 内丘县| 东方市| 札达县| 抚松县| 鱼台县| 通城县| 绵阳市| 腾冲县| 清水县| 花莲县| 和田县| 勐海县| 西畴县| 鲁甸县| 潼南县| 柘城县| 广水市| 广德县| 富川| 南昌县| 神池县| 彝良县| 太仓市| 乌苏市| 许昌县| 凤山县| 互助| 乌兰察布市| 兰州市| 阳原县|