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

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

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

    本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
    隨筆-230  評(píng)論-230  文章-8  trackbacks-0

    新建一個(gè)文本文件包含所需要的腳本。舉例,我會(huì)使用pico編輯器寫一個(gè)腳本用來(lái)運(yùn)行程序tar,帶上必要的可選項(xiàng)可以用來(lái)解壓從因特網(wǎng)下載下來(lái)的*.tar的文件(我好像總是記不住tar的所有參賽)。我決定把我的腳本名稱叫做“untar”:

    pico untar

    因?yàn)樵谖业漠?dāng)前工作目錄里untar文件不存在,所有pico文本編輯器自動(dòng)創(chuàng)建這個(gè)文件,現(xiàn)在,我輸入以下內(nèi)容:

    #!/bin/bash

    echo this is the script file $0

    echo untarring the file $1

    # this calls tar with options -xvzf (extract,

    # verbose, filter through gzip, input filename)

    tar -xvzf $1

    我使用<CTRL>O保存這個(gè)文件,然后<CTRL>X退出。

    腳本的第一行,以“#!”開始是特別的提示-它告訴shell應(yīng)該用哪一個(gè)程序來(lái)解釋我的腳本。在這個(gè)例子里,我使用bash shell /bin/bash。第一行必須使用“#!”開頭,否則腳本不會(huì)運(yùn)行(系統(tǒng)認(rèn)為是一個(gè)文本文件)。其他以“#”開始的行是注釋行只是給作者和讀者使用的,計(jì)算機(jī)將跳過(guò)這些行。
    在以上腳本里,參數(shù)$0, $1, $2…是傳遞到腳本里面的參數(shù)。舉個(gè)例子,如果我運(yùn)行我的腳本名“myscript”帶七個(gè)參數(shù)如下:

    myscript a b c d e f g

    那么,參賽$0就是myscript, $1就是a, $2就是b,$3就是c,依此類推。

    腳本的第二行和第三行,echo命令輸出所有在它后面同一行上的文本,然后擴(kuò)展在腳本里對(duì)應(yīng)的參數(shù)$0和$1。第四行和第五行是我寫的注釋文本,提醒我在這個(gè)腳本里要做的事情。只有最后一行是真正起作用的。

    一旦腳本已經(jīng)寫好,我把文件屬性改成對(duì)文件擁有者是“可執(zhí)行”的:

    chmod u+x untar

    然后我的腳本就可以這樣運(yùn)行了:

    ./untar my_tar.tar.gz

    Liunx腳本的確非常豐富,靈活,功能強(qiáng)勁,還可能有點(diǎn)復(fù)雜。然而,對(duì)于日常任務(wù)編寫一些簡(jiǎn)單腳本,它并不需要什么特別高深的知識(shí)。你可以把一些要用到的命令放在一起,一個(gè)接一個(gè),輸入到文件里。我使用腳本很頻繁是因?yàn)槲姨珣辛耍幌胍淮我淮蔚妮斎胂嗤拿睢?/p>

    一個(gè)最簡(jiǎn)單的方法,可以把一組命令放在文本文件里然后使用source命令傳遞給shell讓它直接運(yùn)行:

    source my_file

    這個(gè)時(shí)候就不需要在文本第一行加上“#!”的標(biāo)志了。

    3.4.6? 引號(hào)的含義
    ?
    一般來(lái)說(shuō),以下字符對(duì)于shell有特殊的含義:

    \ ' " ` < > [ ] ? | ; # $ ^ & * ( ) = <Space> <Tab> <Newline>

    這里有四種不同的符號(hào):反斜杠(\),單引號(hào)(‘),雙引號(hào)(“),反向單引號(hào)(`)。

    ?反斜杠(\)表示:關(guān)閉后面字符的特殊含義?
    ?單引號(hào)(‘)表示:關(guān)閉在兩個(gè)單引號(hào)之間所有字符的特殊含義?
    ?雙引號(hào)(“)表示:關(guān)閉在兩個(gè)雙引號(hào)之間所有字符的特殊含義除了$ ` \?
    ?反向單引號(hào)(`)表示:告訴shell首先運(yùn)行兩個(gè)反向單引號(hào)之間的命令,然后把得到的結(jié)果再傳遞給兩個(gè)單引號(hào)之外的命令。同樣的功能也可以通過(guò)“$command”命令來(lái)實(shí)現(xiàn),而且可能會(huì)更方便。?

    舉個(gè)例子,我可以創(chuàng)建一個(gè)奇怪的目錄名叫做“*”通過(guò)使用“\”或者“’”符號(hào):

    mkdir \*

    mkdir ’*’

    這屏蔽了“*”對(duì)于shell的特別含義。如果沒(méi)有“\”,“*”意味著當(dāng)前目錄下所有文件。

    3.4.7? 輸入輸出重定向
    ?
    有三個(gè)最重要的輸入輸出流:標(biāo)準(zhǔn)輸入(stdin),標(biāo)準(zhǔn)輸出(stdout),標(biāo)準(zhǔn)錯(cuò)誤(stderr)。它們對(duì)于控制臺(tái)(“控制臺(tái)”指的是鍵盤用于輸入,屏幕用于輸出)來(lái)說(shuō)是缺省的,但是它們可以被重定向。

    重定向標(biāo)準(zhǔn)輸出,可以使用“>”符號(hào),舉例:

    dir my_dir > filelisting.txt

    將把dir命令的標(biāo)準(zhǔn)屏幕輸出重定向到文本文件 filelisting.txt文件里,所以屏幕上沒(méi)有任何輸出。這個(gè)文件可以用來(lái)編輯(比如使用pico文本編輯器)或者合并到其他的文件里。

    重定向標(biāo)準(zhǔn)錯(cuò)誤,可以使用結(jié)構(gòu)“2>”,舉例:

    dir my_dir 2> errorlisting.txt

    以上命令將送標(biāo)準(zhǔn)輸出到屏幕上,如果沒(méi)有錯(cuò)誤信息,將沒(méi)有任何信息寫到errorlisting.txt文件里。如果出錯(cuò),則沒(méi)有什么東西輸出到屏幕,而文件errorlisting.txt將包含錯(cuò)誤信息。錯(cuò)誤信息有可能是這樣的:

    dir: my_dir:? Permission denied

    最后,我也可以把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤一起輸出到同一個(gè)文件里,

    dir my_dir > file_and_error_listing.txt 2>&1

    以上命令先重定向標(biāo)準(zhǔn)輸出到文本文件里,然后再重定向標(biāo)準(zhǔn)錯(cuò)誤到和標(biāo)準(zhǔn)輸出同樣的位置。它如何實(shí)現(xiàn)可能看起來(lái)有點(diǎn)古怪,但是是可行的。

    在以上的例子里,如果重定向的文件已經(jīng)存在,該文件會(huì)被覆蓋。如果你要追加到該文件的末尾,可以使用“>>”符號(hào),以上的例子就變成:

    dir my_dir >> filelisting.txt

    dir my_dir 2>> errorlisting.txt

    dir my_dir >> file_and_error_listing.txt 2 > &1

    如果你對(duì)“2>”感到很迷惑,這里有一個(gè)簡(jiǎn)單的辦法可以幫你理解,標(biāo)準(zhǔn)流有標(biāo)準(zhǔn)的解析器:“0”代表標(biāo)準(zhǔn)輸入,“1”代表標(biāo)準(zhǔn)輸出,“2”代表標(biāo)準(zhǔn)錯(cuò)誤。

    dir my_dir > file.txt

    是以下命令的簡(jiǎn)寫方式:

    dir my_dir 1 > file.txt

    那么以下命令就是用來(lái)輸出標(biāo)準(zhǔn)錯(cuò)誤:

    dir my_dir 2 > file.txt

    還有,你還可以使用符號(hào)“|”(管道命令)把一個(gè)命令的標(biāo)準(zhǔn)輸出送到另外一個(gè)命令的標(biāo)準(zhǔn)輸入。在以下這個(gè)標(biāo)準(zhǔn)的例子里,dir命令的標(biāo)準(zhǔn)輸出通過(guò)管道輸入到命令more里(輸出滿屏的時(shí)候自動(dòng)暫停):

    dir | more

    你還可以使用“tee”命令把標(biāo)準(zhǔn)輸出同時(shí)寫到文件和屏幕,

    dir | tee filelisting.txt

    tee是“T型連接器”的模擬音,在管道中的主要的用途是分流。

    這個(gè)部分這樣都用來(lái)講述標(biāo)準(zhǔn)輸出重定向,對(duì)于標(biāo)準(zhǔn)輸入重定向不像標(biāo)準(zhǔn)輸出重定向那么有用,但是它可以使用以下方式實(shí)現(xiàn):

    cat < my_file

    還有一種叫做“直接插入式”的標(biāo)準(zhǔn)輸出,可以通過(guò)“<<”來(lái)實(shí)現(xiàn)。不要管它了,看起來(lái)對(duì)我沒(méi)有什么實(shí)際用處。不過(guò),如果你真的想知道,這里有一個(gè)例子(這里“>”式第二個(gè)提示符)

    cat << my_marker

    > my_line_from_the_keyboard

    > another_line_from_the_keyboard

    > my_marker

    除了重定向到常規(guī)文件和“過(guò)濾器”之外(如以上的例子所示),你還可以重定向到設(shè)備和其他特殊文件。看下面這些例子。

    重定向到設(shè)備文件的例子。以下命令將顯示文件列表到第四個(gè)文本終端:

    dir > /dev/tty4

    以下是一個(gè)重定向到一個(gè)特殊的FIFO(先進(jìn)先出)文件的例子。該命令送信息”you are lucky”到叫做“l(fā)ucky”的ICQ用戶UIN 7777777 (假定你已經(jīng)用你的ICQ程序連接到ICQF服務(wù)器上了)

    echo message 7777777 “you are lucky” < ~/.licq/licq_fifo

    以上的例子能夠工作是因?yàn)樵谀鉲icq目錄下的文件“l(fā)icq_fifo”是一個(gè)特別的FIFO序列文件。以上這個(gè)例子,對(duì)比于在圖形用戶界面下的ICQ程序有什么特別有用的地方嗎?舉個(gè)例子,你可以寫一個(gè)短的腳本帶上多個(gè)信息給你的那些ICQ伙伴們:

    #!/bin/bash

    echo Messaging UIN: $1 Message: $2 Times: $3

    # The next command puts puts your licq in the status "on-line, invisible".

    echo 'status *online' > ~/.licq/licq_fifo

    c=0

    while [ $c -le $3]

    do

    echo message $1 $2 > ~/.licq/licq_fifo

    c=`expr $c + 1`

    echo $c " "

    done

    echo 'status offline' > ~/.licq/licq_fifo

    echo "all done"

    這個(gè)例子利用了licq通信模型(FIFO文件)和簡(jiǎn)單的文件重定向功能,給你一個(gè)關(guān)于如何 “自動(dòng)化”licq的主意。

    3.4.8? Shell的特殊字符(metacharacters)
    ?
    一般來(lái)說(shuō),這些字符對(duì)于shell有特別的含義:

    \ ' " ` < > | ; <Space> <Tab> <Newline> ( ) [ ] ? # $ ^ & * =

    以下是這些字符的含義:

    \ ‘ “ 和 ‘ 主要用來(lái)注釋,前面已經(jīng)描述過(guò) (參見 3.4.6)。

    < 和 > 主要用來(lái)輸入和輸出重定向

    | 是管道命令,管道左邊的標(biāo)準(zhǔn)輸出是管道右邊的標(biāo)準(zhǔn)輸入

    ; 用于間隔在同一命令行上的幾個(gè)命令

    <Space> 和 <Tab> 間用于分開命令的字符和單詞

    <Newline> 完成一條命令或者一組命令

    ( ) 用于封裝需要使用不同的shell啟動(dòng)的命令, 比如 ( dir )

    { } 用于封裝要用當(dāng)前shell啟動(dòng)的一組命令,比如 { dir },需要空格間隔

    & 使當(dāng)前命令在后臺(tái)運(yùn)行(有它自己獨(dú)立的進(jìn)程),所以下一條命令不需要等待前一條命令結(jié)束才能開始。

    * 當(dāng)搜索文件時(shí),它匹配除了以“.”開頭的所有文件

    ?當(dāng)搜索文件時(shí),它匹配任何單個(gè)字符

    [ ] 當(dāng)搜索文件時(shí),它匹配任何在[]里面的單個(gè)字符

    && 是用于連接兩個(gè)命令的“與操作”,

    command1 && command2, 只有當(dāng)command1退出狀態(tài)為0時(shí)(沒(méi)有錯(cuò)誤),command2才會(huì)被執(zhí)行。比如, cat file1 && cat file2 只有當(dāng)file1正常顯示時(shí), file2才能被顯示。

    ||? 是用于連接兩個(gè)命令的“或操作”

    command1 || command2, 只有當(dāng)command1退出狀態(tài)非0時(shí)(有錯(cuò)誤),command2才會(huì)被顯示。比如:cat file1 || cat file2 只有當(dāng)顯示file1出錯(cuò)時(shí),file2才能被顯示

    = 指定值給變量

    舉例,命令me=blahblah設(shè)定值“blahblah”給變量“me”,我可以輸出變量名:

    echo $me

    $????? 預(yù)處理擴(kuò)展變量名

    變量可以使用“=”來(lái)設(shè)定值,也可以通過(guò)預(yù)先變量設(shè)定來(lái)設(shè)置

    $0???? 被執(zhí)行的shell腳本的名稱

    $#???? 按位置對(duì)應(yīng)的命令輸入?yún)?shù), $1第一個(gè)參賽, $2第二個(gè)參數(shù), $3第三個(gè)參數(shù)…直到$9

    $*???? 擴(kuò)展所有的位置參數(shù)給命令

    $@???? 擴(kuò)展所有的位置參數(shù)給命令,但是當(dāng)“$@”使用時(shí),參數(shù)個(gè)別標(biāo)注

    ?

    posted on 2006-09-16 18:37 有貓相伴的日子 閱讀(14327) 評(píng)論(0)  編輯  收藏 所屬分類: linux/unix應(yīng)用
    本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
    主站蜘蛛池模板: 中国一级全黄的免费观看| 在线观看的免费网站| 亚洲小说区图片区| 国产免费久久精品| 免费在线看黄网站| 337P日本欧洲亚洲大胆艺术图| 亚洲线精品一区二区三区 | 久久香蕉国产线看免费| 亚洲爆乳无码精品AAA片蜜桃| 亚洲精品无码永久在线观看你懂的| 69式互添免费视频| 韩国免费a级作爱片无码| 国产.亚洲.欧洲在线| 日韩va亚洲va欧洲va国产| 岛国片在线免费观看| 午夜无码A级毛片免费视频| 国产精品国产亚洲区艳妇糸列短篇| 亚洲视频在线播放| 亚洲伊人成无码综合网| 成年女人免费视频播放77777 | 免费可以看黄的视频s色| 黄色视频在线免费观看| 亚洲国产AV无码一区二区三区| 亚洲AV人无码激艳猛片| 深夜国产福利99亚洲视频| 午夜性色一区二区三区免费不卡视频 | 四虎必出精品亚洲高清| 亚洲AV人无码激艳猛片| 亚洲一区二区三区无码影院| 午夜寂寞在线一级观看免费| 最近中文字幕电影大全免费版| 一个人看的免费观看日本视频www| 亚洲熟妇无码一区二区三区导航| 亚洲综合无码一区二区| 亚洲人成网站在线观看播放| 免费中文字幕在线| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 亚洲精品国产福利一二区| 白白国产永久免费视频| 最近中文字幕免费mv视频7| 日本高清在线免费|