亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 5816 | 回復(fù): 9
打印 上一主題 下一主題

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com    關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2002-10-03 15:47 |只看該作者 |倒序?yàn)g覽
[這個(gè)貼子最后由valentine在 2002/10/03 04:04pm 編輯]

*Shell是什么?
  任何發(fā)明都具有供用戶(hù)使用的界面。UNIX供用戶(hù)使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要強(qiáng)大的多)。 Shell為用戶(hù)提供了輸入命令和參數(shù)并可得到命令執(zhí)行結(jié)果的環(huán)境。

  為了不同的需要,UNIX提供了不同的Shell,F(xiàn)在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)為例,一步步的領(lǐng)略UNIX Shell的強(qiáng)大功能,占先其強(qiáng)大魅力,達(dá)到更方便靈活的管理、應(yīng)用UNIX的目的。

  1.UNIX內(nèi)核和Shell的交互方法

  啟動(dòng)UNIX時(shí),程序UNIX(內(nèi)核)將被調(diào)入計(jì)算機(jī)內(nèi)存,并一直保留在內(nèi)存中直到機(jī)器關(guān)閉。在引導(dǎo)過(guò)程中,程序 init將進(jìn)入后臺(tái)運(yùn)行一直到機(jī)器關(guān)閉。該程序查詢(xún)文件/etc/inittab,該文件列出了連接終端的各個(gè)端口及其特征。當(dāng)發(fā)現(xiàn)一個(gè)活動(dòng)的終端時(shí),init程序調(diào)用getty程序在終端上顯示login等登陸信息。(username和passwd),在輸入密碼后, getty調(diào)用login進(jìn)程,該進(jìn)程根據(jù)文件/etc/passwd的內(nèi)容來(lái)驗(yàn)證用戶(hù)的身份。若用戶(hù)通過(guò)身份驗(yàn)證,login進(jìn)程 把用戶(hù)的home目錄設(shè)置成當(dāng)前目錄并把控制交給一系列setup程序。setup程序可以是指定的應(yīng)用程序,通常setup程序 為一個(gè)Shell程序,如:/bin/sh 即Bourne Shell(command出來(lái)了,呵呵)。

  得到控制后,Shell程序讀取并執(zhí)行文件/etc/.profile以及.profile。這兩個(gè)文件分別建立了系統(tǒng)范圍內(nèi)的和 該用戶(hù)自己的工作環(huán)境。最后Shell顯示命令提示符,如$。(這是以bsh為例,若是csh,為.cshrc,ksh為.kshrc,bash為.bashrc等等)    

  注不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或 config.sys文件)

  當(dāng)shell退出時(shí),內(nèi)核把控制交給init程序,該程序重新啟動(dòng)自動(dòng)登陸過(guò)程。有兩種方法使shell退出,一是用戶(hù)執(zhí)行exit命令,二是 內(nèi)核(例如root用kill命令)發(fā)出一個(gè)kill命令結(jié)束shell進(jìn)程。shell退出后,內(nèi)核回收用戶(hù)及程序使用的資源。

  用戶(hù)登陸后,用戶(hù)命令同計(jì)算機(jī)交互的關(guān)系為:命令進(jìn)程--->Shell程序--->UNIX內(nèi)核--->計(jì)算機(jī)硬件。當(dāng)用戶(hù)輸入一個(gè)命令,如$ls, Shell將定位其可執(zhí)行文件/bin/ls并把其傳遞給內(nèi)核執(zhí)行。內(nèi)核產(chǎn)生一個(gè)新的子進(jìn)程調(diào)用并執(zhí)行/bin/ls。當(dāng)程序執(zhí)行完畢后,內(nèi)核取消 該子進(jìn)程并把控制交給其父進(jìn)程,即Shell程序。例如執(zhí)行:

    $ps

    該命令將會(huì)列出用戶(hù)正在執(zhí)行的進(jìn)程,即Shell程序(下來(lái)詳細(xì)說(shuō)說(shuō),別急現(xiàn)在)和ps程序。若執(zhí)行:

    $sleep 10 &
    $ps

  其中第一條命令將產(chǎn)生一個(gè)在后臺(tái)執(zhí)行的sleep子進(jìn)程。ps命令執(zhí)行時(shí)會(huì)顯示出該子進(jìn)程。

  每當(dāng)用戶(hù)執(zhí)行一條命令時(shí),就會(huì)產(chǎn)生一個(gè)子進(jìn)程。該子進(jìn)程的執(zhí)行與其父進(jìn)程或Shell完全無(wú)關(guān),這樣可以使Shell去做其他工作。(Shell只是把用戶(hù)的意圖告訴內(nèi)核,然后該干嘛干嘛) 現(xiàn)在windows有個(gè)計(jì)劃任務(wù)(在固定的時(shí)間,日期自動(dòng)執(zhí)行某任務(wù)),其實(shí)UNIX很早就有這個(gè)功能了,也就是所謂的Shell的自動(dòng)執(zhí)行。一些UNIX 資源,如cron可以自動(dòng)執(zhí)行Shell程序而無(wú)需用戶(hù)的參與,(這個(gè)功能好象在/var/spool/crotab目錄里)。 Crontab 程序?qū)τ谙到y(tǒng)管理員來(lái)說(shuō)是非常有用的。Cron 服務(wù)用于計(jì)劃程序在特定時(shí)間(月、日、周、時(shí)、分)運(yùn)行。我們以root的crontab 為例。根用戶(hù)的 crontab 文件放在 /var/spool/crontab/root 中,其格式如下:

  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分鐘 (0-60)
      2. 小時(shí) (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要運(yùn)行的程序
  2.Shell的功能和特點(diǎn)
  1>命令行解釋
  2>使用保留字
  3>使用Shell元字符(通配符)
  4>可處理程序命令
  5>使用輸入輸出重定向和管道
  6>維護(hù)一些變量
  7>運(yùn)行環(huán)境控制
  8>支持Shell編程

  對(duì)于"命令行解釋"就不多說(shuō)了,就是在shell提示符(例如:"$","%","#"等)后輸入一行unix命令,Shell將接收用戶(hù)的輸入。

  "使用保留字":Shell有一些具有特殊意義的字,例如在Shell腳本中,do,done,for等字用來(lái)控制循環(huán)操作,if,then等控制條件操作。 保留字隨Shell環(huán)境的不同而不同。

  "通配符":* 匹配任何位置
       ? 匹配單個(gè)字符
       [] 匹配的字符范圍或列表 例如:
       
          $ls [a-c]*
         
          將列出以a-c范圍內(nèi)字符開(kāi)頭的所有文件
          $ls [a,m,t]*
         將列出以e,m或t開(kāi)頭的所有文件

  "程序命令" :當(dāng)用戶(hù)輸入命令后,Shell讀取環(huán)境變量$path(一般在用戶(hù)自己的.profile中設(shè)置),該變量包含了命令可執(zhí)行文件可能存在的目錄列表。 shell從這些目錄中尋找命令所對(duì)應(yīng)的可執(zhí)行文件,然后將該文件送給內(nèi)核執(zhí)行。

  "輸入輸出重定向及管道" :重定向的功能同DOS的重定向功能:

     ">" 重定向輸出
     &quot;<&quot; 重定向輸入

  而管道符號(hào),是unix功能強(qiáng)大的一個(gè)地方,符號(hào)是一條豎線:&quot;|&quot;,用法: command 1 | command 2 他的功能是把第一個(gè)命令command 1執(zhí)行的結(jié)果作為command 2的輸入傳給command 2,例如:

    $ls -s|sort -nr|pg

  該命令列出當(dāng)前目錄中的所有文件,并把輸出送給sort命令作為輸入,sort命令按數(shù)字遞減的順序把ls的輸出排序。然后把排序后的 內(nèi)容傳送給pg命令,pg命令在顯示器上顯示sort命令排序后的內(nèi)容。

  &quot;維護(hù)變量&quot; :Shell可以維護(hù)一些變量。變量中存放一些數(shù)據(jù)供以后使用。用戶(hù)可以用&quot;=&quot;給變量賦值,如:

         $lookup=/usr/mydir

該命令建立一個(gè)名為lookup的變量并給其賦值/usr/mydir,以后用戶(hù)可以在命令行中使用lookup來(lái)代替/usr/mydir,例如:          
         $echo $lookup
         結(jié)果顯示:/usr/mydir

         為了使變量能被子進(jìn)程使用,可用exprot命令,例如:

         $lookup=/usr/mydir
         $export lookup

  &quot;運(yùn)行環(huán)境控制&quot; :當(dāng)用戶(hù)登陸啟動(dòng)shell后,shell要為用戶(hù)創(chuàng)建一個(gè)工作的環(huán)境,如下:

  1>當(dāng)login程序激活用戶(hù)shell后,將為用戶(hù)建立環(huán)境變量。從/etc/profile和.profile文件中讀出,在這些文件中一般都用$TERM 變量設(shè)置終端類(lèi)型,用$PATH變量設(shè)置Shell尋找可執(zhí)行文件的路徑。

  2>從/etc/passwd文件或命令行啟動(dòng)shell時(shí),用戶(hù)可以給shell程序指定一些參數(shù),例如&quot;-x&quot;,可以在命令執(zhí)行前顯示該命令及其參數(shù)。后面詳細(xì)介紹這些參數(shù)。

  &quot;shell編程&quot; :本文主要介紹的內(nèi)容。

  shell本身也是一種語(yǔ)言(*可以先理解為unix命令的組合,加上類(lèi)C的條件,循環(huán)等程序控制語(yǔ)句,類(lèi)似dos批處理,但要強(qiáng)大的多),用戶(hù)可以 通過(guò)shell編程(腳本,文本文件),完成特定的工作。

SHELL變量

  下面我們?cè)敿?xì)的介紹Bourne Shell的編程:

  自從貝爾實(shí)驗(yàn)室設(shè)計(jì)了Bourne Shell。從那時(shí)起許多廠商根據(jù)不同的硬件平臺(tái)設(shè)計(jì)了許多版本得unix。但在眾多版本的unix中,Bourne Shell 一直保持一致。
  1>Bsh的啟動(dòng):用戶(hù)在登陸后,系統(tǒng)根據(jù)文件/etc/passwd中有關(guān)該用戶(hù)的信息項(xiàng)啟動(dòng)Shell。例如某用戶(hù)在passwd中 的信息項(xiàng)為:

    ice_walk411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh

  則表明,用戶(hù)名是ice_walk等信息,在最后一項(xiàng)&quot;/bin/bsh&quot;表明用戶(hù)的sh環(huán)境類(lèi)型是bsh,于是系統(tǒng)啟動(dòng)之。在啟動(dòng)或執(zhí)行(包括下面我們要講 的shell程序--腳本)過(guò)程中可以使用以下一些參數(shù),我們一一說(shuō)明:

  -a 將所有變量輸出
  -c &quot;string&quot;從string中讀取命令
  -e 使用非交互式模式
  -f 禁止shell文件名產(chǎn)生
  -h 定義
  -i 交互式模式
  -k 為命令的執(zhí)行設(shè)置選項(xiàng)
  -n 讀取命令但不執(zhí)行
  -r 受限模式
  -s 命令從標(biāo)準(zhǔn)輸入讀取
  -t 執(zhí)行一命令,然后退出shell
  -u 在替換時(shí),使用未設(shè)置的變量將會(huì)出錯(cuò)
  -v 顯示shell的輸入行
  -x 跟蹤模式,顯示執(zhí)行的命令
許多模式可以組合起來(lái)用,您可以試試了,但-ei好象不行,你說(shuō)why呢?

  使用set可以設(shè)置或取消shell的選項(xiàng)來(lái)改變shell環(huán)境。打開(kāi)選項(xiàng)用&quot;-&quot;,關(guān)閉選項(xiàng)用&quot;+&quot;,多數(shù)unix允許打開(kāi)或關(guān)閉a、f、e、h、k、n、 u、v和x選項(xiàng)。若顯示Shell中已經(jīng)設(shè)置的選項(xiàng),執(zhí)行:

    $echo $-

  Bsh中每個(gè)用戶(hù)的home目錄下都有一個(gè).profile文件,可以修改該文件來(lái)修改shell環(huán)境。為了增加一個(gè)可執(zhí)行文件的路徑(例如/ice_walk/bin), 可以把下面代碼加入.profile中

    PATH=$PATH:/ice_walk/bin&#59;exprot PATH

   .profile中shell的環(huán)境變量意思如下:

    CDPATH 執(zhí)行cd命令時(shí)使用的搜索路徑
    HOME 用戶(hù)的home目錄
    IFS 內(nèi)部的域分割符,一般為空格符、制表符、或換行符
    MAIL 指定特定文件(信箱)的路徑,有UNIX郵件系統(tǒng)使用
    PATH 尋找命令的搜索路徑(同dos的config.sys的 path)
    PS1 主命令提示符,默認(rèn)是&quot;$&quot;
    PS2 從命令提示符,默認(rèn)是&quot;>&quot;
    TERM 使用終端類(lèi)型

  2>Bsh里特殊字符及其含義

  在Bsh中有一組非字母字符。這些字符的用途分為四類(lèi):作為特殊變量名、產(chǎn)生文件名、數(shù)據(jù)或程序控制以及引用和逃逸字符控制。他們 可以讓用戶(hù)在Shell中使用最少的代碼完成復(fù)雜的任務(wù)。

     *> Shell變量名使用的特殊字符
        $# 傳送給命令Shell的參數(shù)序號(hào)
        $- 在Shell啟動(dòng)或使用set命令時(shí)提供選項(xiàng)
        $? 上一條命令執(zhí)行后返回的值
        $$ 當(dāng)前shell的進(jìn)程號(hào)
        $! 上一個(gè)子進(jìn)程的進(jìn)程號(hào)
        $@ 所有的參數(shù),每個(gè)都用雙括號(hào)括起
        $* 所有參數(shù),用雙括號(hào)括起
        $n 位置參數(shù)值,n表示位置
        $0 當(dāng)前shell名
     *>產(chǎn)生文件名的特殊字符
        包括&quot;*&quot;,&quot;?&quot;,&quot;[]&quot;,上面講過(guò),不再多說(shuō)。
     *>數(shù)據(jù)或程序控制使用的特殊字符
        >(file) 輸出重定向到文件中(沒(méi)有文件則創(chuàng)建,有則覆蓋)
        >>(file) 輸出重定向到文件中(沒(méi)有則創(chuàng)建,有則追加到文件尾部)
        <(file) 輸入重定向到文件
        &#59; 命令分割符
        | 管道符
        &amp; 后臺(tái)運(yùn)行(例如:sleep 10 &amp
        ` ` 命令替換,重定向一條命令的輸出作為另一命令的參數(shù)
     *>對(duì)于引用或逃逸的特殊字符

  Bsh用單引號(hào)' '和雙引號(hào)&quot; &quot;將特殊字符或由空白分隔的字引用起來(lái)組成一個(gè)簡(jiǎn)單的數(shù)據(jù)串.使用單引號(hào)和雙引號(hào)的區(qū)別是雙引號(hào)中的內(nèi)容可進(jìn)行參數(shù)和變量替換.逃逸字符也一樣.

        $echo &quot;$HOME $PATH&quot;
         結(jié)果顯示$/u/ice_walk/bin:/etc:/usr/bin
        而$echo '$HOME $PATH' 結(jié)果顯示$HOME $PATH

  shell的逃逸符是一個(gè)&quot;\&quot;,表示其后的字符不具有特殊的含義或不是shell的函數(shù)

        $echo \$HOME $PATH
        結(jié)果顯$$HOME /bin:/etc:/usr/bin:

3>Bsh的變量

  前面我們?cè)诙鄠(gè)地方引用了變量,當(dāng)Shell遇到一個(gè)&quot;$&quot;符時(shí)(沒(méi)有被引用或逃逸),它將認(rèn)為其后為一變量。不論該變量是環(huán)境變量還是用戶(hù)自定義的變量,在命令行中變量名要被變量值替換。例如命令:ls $HOME將列出變量HOME對(duì)應(yīng)目錄下的文件。 用戶(hù)可以在命令行中的任何地方進(jìn)行變量替換。包括命令名本身,例如:

    $dir=ls
    $$dir f*

  將列出以f開(kāi)頭的文件。

  現(xiàn)在詳細(xì)的介紹下Bsh的變量。Bsh中有四類(lèi)變量:用戶(hù)定義的變量、位置變量(shell參數(shù))、預(yù)定義變量及環(huán)境變量。

  用戶(hù)定義的變量:

  用戶(hù)定義的變量由字母和下劃線組成,并且變量名的第一個(gè)字符不能為數(shù)字(0~9)。與其他UNIX名字一樣,變量名是大小寫(xiě)敏感的。用戶(hù)可以在命令行上用&quot;=&quot;給變量賦值,例如:

    $NAME=ice_walk

  給變量NAME賦值為ice_walk,在應(yīng)用變量NAME的時(shí)候,在NAME前加&quot;$&quot;即可,前面已說(shuō),不再?gòu)U話(huà)(別說(shuō)我廢話(huà)多,關(guān)鍵是沒(méi)當(dāng)過(guò)老師)?梢杂米兞亢推渌址M成新的字,例如:

    $SUN=sun
    $echo ${SUN}day

  在應(yīng)用shell變量時(shí)候,可以在變量名字兩邊$后面加上{},以更加清楚的顯示給shell,哪個(gè)是真正的變量,以實(shí)現(xiàn)字符串的合并等功能。
 
  結(jié)果顯示:sunday(注意不能echo $SUNday,因?yàn)镾UNday變量沒(méi)定義,讀者試下執(zhí)行結(jié)果) 用戶(hù)也可以在命令行上同時(shí)對(duì)多個(gè)變量賦值,賦值語(yǔ)句之間用空格分開(kāi):

    $X=x Y=y

    注意變量賦值是從右到左進(jìn)行的

    $X=$Y Y=y
    X的值是y
    $X=z Y=$Z

    Y的值是空(變量未賦值時(shí),shell不報(bào)錯(cuò),而是賦值為空)

  用戶(hù)可以使用&quot;unset <變量>&quot;命令清除給變量賦的值
  用戶(hù)使用變量時(shí)要在其前面加一&quot;$&quot;符,使變量名被變量值所替換。Bsh可以進(jìn)行變量的條件替換,即只有某種條件發(fā)生時(shí)才進(jìn)行替換。替換條件放在一對(duì)大括號(hào){}中,如:

    ${variable: -value} variable是一變量值,value是變量替換使用的默認(rèn)值

    $echo Hello $UNAME
    結(jié)果顯示:Hello
    $echo Hello ${UNAME: -there}
    結(jié)果顯示:Hello there
    $echo $UNAME
    結(jié)果顯示: (空)
    $UNAME=John
    $echo Hello ${UNAME: -there}
    結(jié)果顯示:Hello John

  可以看出,變量替換時(shí)將使用命令行中定義的默認(rèn)值,但變量的值并沒(méi)有因此而改變。另外一種替換的方法是不但使用默認(rèn)值進(jìn)行替換,而且將默認(rèn)值賦給該變量。其形式如下:

    ${variable:=value}

  該形式在變量替換后同時(shí)把值value符給變量variable。

    $echo Hello $UNAME
    結(jié)果顯示:Hello
    $echo Hello ${UNAME:=there}
    結(jié)果顯示:Hello there
    $echo $UNAME
    結(jié)果顯示:there
    $UNAME=John
    $echo Hello ${UNAME:-there}
    結(jié)果顯示:Hello John

  變量替換的值也可以是` `括起來(lái)的命令:

    $USERDIR={$Mydir: -`pwd`}

  第三種變量的替換方法是只有當(dāng)變量已賦值時(shí)才用指定值替換形式:

    ${variable: +value}

    只有變量variable已賦值時(shí),其值才用value替換,否則不進(jìn)行任何替換,例如:

    $ERROPT=A
    $echo ${ERROPT: +&quot;Error tracking is acitive&quot;}
    結(jié)果顯示:Error tracking is acitive
    $ERROPT=
    $echo ${ERROPT: +&quot;Error tracking is acitive&quot;}
    結(jié)果顯示: (空)

  我們還可以使用錯(cuò)誤檢查的條件進(jìn)行變量替換:

    ${variablemessage}
當(dāng)變量variable已設(shè)置時(shí),正常替換。否則消息message將送到標(biāo)準(zhǔn)錯(cuò)誤輸出(若此替換出現(xiàn)在shell程序中,那么該程序?qū)⒔K止)。 例如:

    $UNAME=
    $echo $ {UNAME&quot;UNAME HAS NOT BEEN SET&quot;}
    結(jié)果顯示:UNAME HAS NOT BEEN SET

    $UNAME=Stephanie
    $echo $ {UNAME&quot;UNAME HAS NOT BEEN SET&quot;}

    結(jié)果顯示:Stephanie
    當(dāng)沒(méi)有指定message時(shí),shell將顯示一條默認(rèn)的消息,例如:

    $UNAME=
    $echo $ {UNAME}
    結(jié)果顯示:sh:UNAME:parameter null or not set

4>位置變量或Shell參數(shù)

  在shell解釋用戶(hù)的命令時(shí),將把命令行的第一個(gè)字作為命令,而其他的字作為參數(shù)。當(dāng)命令對(duì)應(yīng)的可執(zhí)行文件為Shell程序時(shí),這些參數(shù)將作為位置變量傳送給該程序。第一個(gè)參數(shù)記為$1,第二個(gè)為$2....第九個(gè)為$9。其中1到9是真正的參數(shù)名,&quot;$&quot;符只是用來(lái)標(biāo)識(shí)變量的替換。

  位置變量$0指命令對(duì)應(yīng)的可執(zhí)行文件名。在后面將詳細(xì)介紹位置變量。

  1.只讀變量

  用戶(hù)將變量賦值后,為了防止以后對(duì)該變量的修改,可以用以下命令將該變量設(shè)置為只讀變量:

    readonly variable

  2.export命令

  shell執(zhí)行一個(gè)程序時(shí),首先為該程序建立一個(gè)新的執(zhí)行環(huán)境,稱(chēng)為子shell。在Bourne Shell中變量都是局部的,即他們只在創(chuàng)建他們的Shell中有意義。用戶(hù)可以用export命令讓變量被其他子Shell識(shí)別。但某用戶(hù)的變量是沒(méi)法讓其他用戶(hù)使用的。

  當(dāng)用戶(hù)啟動(dòng)一個(gè)新shell時(shí),該shell將使用默認(rèn)的提示符。因?yàn)橘x給變量PS1的值只在當(dāng)前shell中有效。為了讓子Shell使用當(dāng)前Shell中定義的提示符號(hào),可以使用export命令:

    $PS1=&quot;Enter command:&quot;
    Enter command:export PS1
    Enter command:sh
    Enter command:

    此時(shí)變量PS1變成了全局變量。它可以被其子Shell使用。當(dāng)變量被設(shè)置成全局的以后,將一直保持有效直到用戶(hù)退出該變量所在的Shell。用戶(hù)可以在文件.profile中給一個(gè)變量永久賦值。詳見(jiàn)&quot;規(guī)范Shell&quot;。

基本語(yǔ)句

  從本節(jié)起,我們將詳細(xì)介紹Shell程序設(shè)計(jì)的基本知識(shí),通過(guò)編寫(xiě)Shell腳本,用戶(hù)可以根據(jù)自己的需要有條件的或者重復(fù)的執(zhí)行命令。通過(guò)Shell程序,可以把單個(gè)的UNIX命令組合成一個(gè)完全實(shí)用的工具,完成用戶(hù)的任務(wù)。

  1>什么是Shell程序

  當(dāng)用戶(hù)在UNIX Shell中輸入了一條復(fù)雜的命令,如:

    $ls -R /|greo myname |pg

  我們可以稱(chēng)用戶(hù)在對(duì)Shell編程,當(dāng)把這條語(yǔ)句寫(xiě)在一個(gè)文件里,并且符給該文件可執(zhí)行權(quán)限,那么該文件就是我們傳統(tǒng)上說(shuō)的Shell程序。

  2>簡(jiǎn)單的Shell程序

  假設(shè)用戶(hù)每天使用下述命令備份自己的數(shù)據(jù)文件:

    $cd /usr/icewalk&#59;ls * |cpio -o > /dev/fd0

  我們可以把它寫(xiě)在一個(gè)文件,如:ba.sh中:

    $cat >ba.sh
    cd /usr/icewalk
    ls * |cpio -o > /dev/fd0
    ^D  (ctrl_d)

  程序ba.sh就是Shell腳本,用戶(hù)可以用vi或其他編輯工具編寫(xiě)更復(fù)雜的腳本。

  此時(shí)用戶(hù)備份文件只需要執(zhí)行Shell程序ba.sh,執(zhí)行時(shí)需在當(dāng)前Shell中創(chuàng)建一個(gè)子Shell:

    $sh ba.sh

  程序sh與用戶(hù)登陸時(shí)執(zhí)行的Bourne Shell相同,但當(dāng)Sh命令帶參數(shù)ba.sh后,它將不再是一個(gè)交互式的Shell,而是直接從文件ba.sh中讀取命令。

  執(zhí)行ba.sh中命令的另一方法是給文件ba.sh執(zhí)行權(quán)限:

    $chmod +x ba.sh

  此時(shí),用戶(hù)可以輸入文件名ba.sh做為一個(gè)命令來(lái)備份自己的數(shù)據(jù),需要注意的是,用這種方法執(zhí)行命令的時(shí)候,文件ba.sh必須存在于環(huán)境變量$PATH所指定的路徑上。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2002-10-03 16:01 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

歡迎支持.

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2002-10-06 11:23 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

看了這幾篇文章可以對(duì)shell有個(gè)較全面的基本的認(rèn)識(shí)!

論壇徽章:
1
巳蛇
日期:2014-12-29 11:22:41
4 [報(bào)告]
發(fā)表于 2002-10-08 16:36 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

不錯(cuò),比較適合于初學(xué)者起步

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2003-05-18 17:25 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

我是telnet到學(xué)校的機(jī)子去做linux試驗(yàn)的
我在自己目錄下編了一個(gè)程序(x.sh),但是我輸入x.sh提示找不到命令
我對(duì)這片文章中設(shè)置path的看不太懂,求教
ps:我們都是一般用戶(hù),只在自己目錄有權(quán)限,可以直接qq我39383709

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2003-05-26 16:35 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

你只要 ./x.sh  這樣執(zhí)行就可以了,表示當(dāng)前目錄下

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2003-05-27 17:55 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

精彩!是不是還有下篇啊?有的話(huà),早點(diǎn)上傳哦!

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2003-06-24 15:19 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

     支持,歡迎一切熱心認(rèn)壇的人![/img]

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2003-07-17 10:20 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

謝謝了!

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2003-09-10 10:53 |只看該作者

[新手必讀]Unix系列shell程序編寫(xiě)(上)轉(zhuǎn)自yesky.com  

拜謝。
ps:對(duì)新手的帖子諸如我,說(shuō)話(huà)要盡量羅嗦:)
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP