成長(zhǎng)空間

          MiLife

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          Automation Testing Development

          最新評(píng)論

          Unix Basic

          1 UNIX起源、流派及標(biāo)準(zhǔn)
          1.1 UNIX的發(fā)展簡(jiǎn)史
          60年代由麻省理工學(xué)院、通用電器公司、AT&T貝爾試驗(yàn)室組成一個(gè)專(zhuān)家小組,研制一個(gè)MULICS,是一個(gè)靈活的交互式操作系統(tǒng)。
          60年后期,BELL脫離該組織,失去了靈活的交互式操作系統(tǒng)。
          1990年,有一個(gè)叫Ken.Tompson寫(xiě)了一個(gè)SPACE TRAVEL的游戲,是在PDP-7上寫(xiě)的,為了更有效地發(fā)揮PDP-7的強(qiáng)大功能,托普森和另一位科學(xué)家Dennis Ritchie開(kāi)發(fā)了一個(gè)新的操作系統(tǒng)UNIX。此前Dennis創(chuàng)建了C語(yǔ)言。
          1973年Ken和Dennis用C語(yǔ)言重寫(xiě)了UNIX。UNIX成為世界上第一個(gè)用高級(jí)語(yǔ)言寫(xiě)的操作系統(tǒng)。
          C語(yǔ)言使UNIX更容易移植,移植是UNIX最重要的優(yōu)越性
          70年代UNIX版本不斷更新,74年后,世界上所有的大學(xué)都可以以極小的代價(jià)獲得UNIX的源代碼,由此產(chǎn)生了很多重要的分支,包括一個(gè)BSD版,加州伯克利大學(xué)Berkeley Software Distribution。80年代AT&T重新命令UNIX版。
          l 1973年,美國(guó)高等院校開(kāi)始使用UNIX
          l 1974年,Version 4
          l 1976年,Version5,6
          l 1978年,Bell開(kāi)發(fā)出系統(tǒng) III
          l 1979年,Berkekey分校發(fā)布BSD 3
          l 1982年,Berkekey分校發(fā)布BSD 4.2
          l 1983年,Bell開(kāi)發(fā)出系統(tǒng)V
          l 1983年,Berkekey分校推出第一個(gè)內(nèi)含TCPIP的BSD UNIX
          l 1985年,AT&T 推出SVR2,即系統(tǒng)V,RELEASE 2
          l 1987年,AT&T 推出SVR3
          l 1989年,AT&T 推出SVR4
          82年后,AT&T發(fā)布商業(yè)版,SYSTEM3以前均為內(nèi)部使用。
          BSD起源于1974年,伯克利研究小組畢業(yè)的學(xué)生Bill Joy開(kāi)發(fā)出更好性能的UNIX。如CSH、VI、虛擬存儲(chǔ)環(huán)境,這些性能后來(lái)被柔進(jìn)了SYSTEM 5。
          1974  BSD     1979  2BSD     1982  3BSD
          1984  4BSD     1987  4.3BSD  4.5BSD 
          在微機(jī)領(lǐng)域,71年分支出XENIX
          81年   XENIX2.3  XENIX3.0  XENIX5.0遵守SVID
          85年 AT&T宣布一個(gè)標(biāo)準(zhǔn)SVID
          (Standard Called System U Imterface Defination)
          85年出現(xiàn)SYSTEM U/386與SVID完全兼容。
          當(dāng)時(shí)主要的UNIX(XENIX、SYSTEMU、BSD)占80%。
          BSD 一般出現(xiàn)在大學(xué)
          SYSTEM為用于商業(yè)領(lǐng)域
          XINIX 只用于PC
          1.2 UNIX標(biāo)準(zhǔn)化
          1984年歐州5家成立X/OPEN協(xié)會(huì)。
          XPG3――XPG4
          SPE C 1170
          1985年IEEE公布POSIX 1003
          1988年5月 DEC、IBM、HP 公布OSF(BSD)AES
          1988年12月AT&T SUN公布UI (SYSTEM V)
          1992年12月NOVELL購(gòu)買(mǎi)USL轉(zhuǎn)讓給X/OPEN
          1993年9月WINDOWS NT出現(xiàn)使OSF和UI和解,產(chǎn)生COSE。包括XPG4、POSIX、SUID3、SVR4.3、AES、MOTIF、TCPIP。
          1.3 常見(jiàn)商業(yè)版本
          SUN SOLORIS純SYSTEM V
          IBM AIX4.3
          HP-UX
          IRIX遵守POSIX
          Tru64 UNIX 成熟、統(tǒng)一對(duì)COSE遵守最好。SPEC1170 MACH微內(nèi)核完整、大而全。
          LINUX 自由軟件、微內(nèi)核、多平臺(tái)支持各種協(xié)議。
          2 DIGITAL UNIX優(yōu)點(diǎn)
          l 全64位軟硬件體系結(jié)構(gòu)
          l 最快的64位平臺(tái)
          l SMP多線程共享程序、軟件升級(jí)不必重新連接、內(nèi)存映射文件、 單一系統(tǒng)映像Cluster、VLM
          l 具存防崩潰性能
          l 超大規(guī)模收據(jù)庫(kù)訪問(wèn)能力,支持大于17MB的文件
          l 規(guī)模可伸縮
          l 低成本管理
          l 最OPEN、最標(biāo)準(zhǔn)
          l 支持ADVFS、LSM、CLUSTER
          l 支持各種網(wǎng)絡(luò)
          l 國(guó)際化不另收費(fèi)用
          l 支持IEEE標(biāo)準(zhǔn),POSIX命令及實(shí)時(shí)線程
          l 支持FIPS 151 -2
          l 支持ISO/IEC  9945-1  1990
          l 支持X/OPEN 可移植性指南VOLUME4(XPG4)
          l 支持BSD4.3 4.4
          l 支持MIT XIIR5 ADK FOR XIIR6
          l 支持FIPS 160(ANSI)
          l 支持OSF MOTIF 1.2.3
          l 支持UNIX 93
          l 支持RFC
          l 支持ISO 9660(CDFS)
          l 支持NFS V.3
          l 支持SVR4 SVR3  SVID2 SVID3
          3 初次上機(jī)
          3.1 進(jìn)入系統(tǒng)
          UNIX系統(tǒng)為多用戶,多任務(wù)操作系統(tǒng),有很完善的用戶管理和安全機(jī)制,使用系統(tǒng)的每一個(gè)人都可以有一個(gè)用戶名,并有一個(gè)用戶識(shí)別碼UID,每個(gè)用戶至少屬于一個(gè)用戶組,可以同時(shí)屬于多個(gè)用戶組,組是UNIX系統(tǒng)為了方便用戶管理而建立的一個(gè)用戶集合,進(jìn)入系統(tǒng)只需輸入自己的用戶名和口令,不需要輸入組名。
          l 主機(jī)終端
            按回車(chē)鍵開(kāi)始登錄過(guò)程
          l 終端服務(wù)器
            按回車(chē)鍵登錄到終端服務(wù)器
            用c命令 connect 開(kāi)始登錄過(guò)程
          l PC機(jī)  
           用telnet 命令
            login:用戶名
            password :口令   (不顯示出來(lái))
            PC 用Telnet 開(kāi)始登錄過(guò)程
          l Xwindows 
            輸入用戶名按回車(chē)
            輸入口令按回車(chē)
              可以選擇語(yǔ)言環(huán)境
          3.2 改變口令
          $ passwd 回車(chē)
          old password:輸入舊口令
          new password :輸入新口令
          reenter new password :重新輸入,驗(yàn)證
          3.3 chsh 改變login shell
          chsh
          /bin /sh 
          /bin /csh
          3.4 chfn 改變用戶電話號(hào)碼,力公室位置等信息
          chfn
          3.5 獲得幫助
          help   命令獲極少的幫助
          man  查有聯(lián)機(jī)手冊(cè)
          man cmd   查看cmd詳細(xì)手冊(cè)
          man –k keyword  查看與keyword相關(guān)的所有命令。
          man n cmd 
          一般情況下手冊(cè)被分組為1到8其8個(gè)組,某些命令在多個(gè)組中均有幫助信息,用man n 指定讀取n組中的信息。
          where is cmd
          查看cmd的絕對(duì)路徑。
          echo $PATH 
          which cmd
          查看cmd 是哪個(gè)目錄的cmd
          who am I     whoamI 
          查看自己的用戶名
          who,   w 
          查看當(dāng)前誰(shuí)在系統(tǒng)上
          users,  u 
          查看當(dāng)前系統(tǒng)的用戶
          finger user 
          查看user 的信息
          ps  顯示當(dāng)前進(jìn)程狀況
          ps –u user 顯示用戶名為user 的進(jìn)程狀況
          3.6 作業(yè)調(diào)度
          命令行可加&表示后臺(tái)執(zhí)行
          例  f 77  test.f &  在后臺(tái)執(zhí)行編譯命令。
          命令的輸入和輸出可重定向。
          例   ls  -l >dir.lis
               lmf rdg -<l1
          -表示標(biāo)準(zhǔn)輸入或標(biāo)準(zhǔn)輸出
          例  zcat file.z| [cd/tmp ;tar xvf -]
          前命令的結(jié)果可以作為后一個(gè)命令的輸入,稱(chēng)為管道技術(shù)
          例ps –ef | more
            strings .*| grep user 
          作業(yè)調(diào)入前臺(tái)執(zhí)行
          fg %job
          ^z 使當(dāng)前作業(yè)掛起
          bg %job 使作業(yè)在后臺(tái)恢復(fù)執(zhí)行
          at 批作業(yè)
          at time cmd 
          例 at 5pm Friday rm /tmp/*
          4 UNIX文件和目錄結(jié)構(gòu)
          4.1 文件名和目錄名
          必須遵守以下規(guī)則:
          可采用除“1”外的任何ASCII字符
          以“.”開(kāi)頭的文件名在普通用戶看來(lái)是隱蔽的。
          “.”代表當(dāng)前目錄,“..”代表上級(jí)目錄。
          特殊字符用反斜桿引導(dǎo)“\”
          4.2 文件類(lèi)型
          l 普通文件
          l 鏈
          l 特殊文件,如終端、通信設(shè)備、驅(qū)動(dòng)器、FIFO、SOCKET
          4.3  文件系統(tǒng)結(jié)構(gòu)
          倒樹(shù)結(jié)構(gòu)
          /為根
          4.4 目錄樹(shù)
          /.文件系統(tǒng)的根目錄,超級(jí)用戶的HOME目錄
          /stand UNIX引導(dǎo)時(shí)使用的標(biāo)準(zhǔn)程序和數(shù)據(jù)文件
          /sbin  UNIX引導(dǎo)時(shí)使用的程序
          /dev  特殊設(shè)備文件
          /dev/console 控制臺(tái)
          /dev/lp 并口打印機(jī)
          /dev/rz** 硬盤(pán)塊設(shè)備文件
          /dev/rmton 磁帶文件
          /etc   系統(tǒng)管理及配置數(shù)據(jù)庫(kù)
          /opt   附加應(yīng)用軟件包的根
          /home  用戶主目錄和文件
          /var   系統(tǒng)用文件、目錄、日志、記帳、郵件、假脫機(jī)
          /var/adm 系統(tǒng)日志,記帳
          /var/mail 用戶郵件文件
          /var/news 新聞目錄
          /var/opt  附加應(yīng)用程序子目錄
          /var/tmp  臨時(shí)文件
          /var/spool 假脫機(jī)目錄
          /var/uucp  Uucp日志和狀態(tài)
          /usr    其它用戶可訪問(wèn)的根
          /usr/bin  新的可執(zhí)行程序命令
          /usr/sbin  新的系統(tǒng)命令,可執(zhí)行程序
          /usr/lib   率
          /usr/include 頭文件
          /usr/examples  例子文件
          /usr/share/man  聯(lián)機(jī)手冊(cè)
          /usr/ucb  包含Bsd Unix兼容的軟件包
          /usr/ibn  多國(guó)字符程序數(shù)據(jù)
          4.5  目錄和文件的使用
             絕對(duì)路徑名  以/開(kāi)頭,從根開(kāi)始
             相對(duì)路徑名  其它以..,目錄名,文件名開(kāi)始
          UNIX命令 相應(yīng)DOS命令
          pwd  列出當(dāng)前工作目錄  cd
          ls   列目錄內(nèi)容 dir/w
          ls -l           dir 
          ls -a           dir/a
          ls -r           dir/s
          ls -x           dir/w
          ls –l |more          dir/p
          ls –F   用符號(hào)表示簡(jiǎn)單屬性
          ls -q  用?表示非打印字符
          cat 顯示文件內(nèi)容
          cat file         type file
          cat file1 file2 file3     type file1+file2+file3
          cat -n file  顯示行號(hào)
          cat -u file  顯示非打印字符  -u 輸出無(wú)緩沖
          cat -r file  多個(gè)空行合為1行
          cd  改變工作目錄
          cd usr          cd dos 
          cd /usr                    cd  c:\dos
          cd ..                         cd ..
          cd ../..                        cd ..\ ..
          cd 
          mv  移動(dòng)文件或目錄
          mv file1 file2          ren file1 file2
          mv file1 dir2           move file1 dir2
          mv dir1 dir2       xcopy dir1 dir2  deltree dir1
          mv –i  如果目標(biāo)文件存在則提示
          mv -f 強(qiáng)制拷貝
          cp   拷貝文件
          cp file1 file2     copy file1 file2
          cp  -i file1 file2  提示覆蓋
          cp  -r dir1 dir2   xcopy /s dir1 dir2
          cp  -p  屬性不變
          cp file1 file2 file3 file4…target 合并文件
          ln 建立軟鏈        dos 下只有用
          ln source des        norton tools 等工具才能實(shí)現(xiàn),但chkdsk將檢查出錯(cuò)誤。
          ln  -s source 符號(hào)連接忽略des屬性
          ln  -f source des
          rm 刪除文件或目錄
          rm file1          del file1
          rm *           del *.*
          rm -r dir          deltree  dir
          rm -i
          rmdir  刪除目錄
           條件:目錄必須是空目錄
          rmdir dir          rd dir
          mkdir 創(chuàng)建子目錄
          mkdir dir        md  dir
          mkdir  -m 指定使用mode
          mkdir  -p ../dir1/dir2/dir3
          file 查看文件類(lèi)型
          file *
          find 查找指定文件
          find path expression
           -print 打印文件所在路徑
           -exec cmd 對(duì)找到的文件執(zhí)行cmd命令
           -atime n 只查幾天以前的文件
          pg 分頁(yè)顯示文件
          more 分頁(yè)顯示文件
          lp  打印文件
          lpstat  查看打印隊(duì)列
          lprm 刪除打印作業(yè)
          cancel 
          4.6 文件屬性
          4.6.1 定義
          $ ls –l 
          total 24094
          -rw-r--r--   1 root     system    176584 Jul  5 17:09 3500install.pdf
          -rw-r--r--   1 root     system      2593 Jun 13 12:48 DXsession
          -rw-r--r--   1 bin      bin         2476 Apr 13  1999 GENERIC
          lrwxr-xr-x   1 root     system         7 May 31 16:41 bin -> usr/bin


          -rw-------   1 root     system       501 Jun 23 22:31 tcr2
          drwxrwxrwt   3 root     system      8192 Sep  3 12:59 tmp
          drwxr-xr-x  29 root     system      8192 Aug 31 14:22 usr
          lrwxr-xr-x   1 root     system         7 May 31 16:38 var -> usr/var
          -rwxr-xr-x   1 root     system   9549088 Jun  1 12:29 vmunix
          $
          使用ls –l命令顯示文件的全部屬性,其中第一個(gè)域反應(yīng)文件的類(lèi)型和訪問(wèn)屬性,第1列為
          - 表示為普通文件
          d  表示為目錄文件
          l 該文件為連接
          第2,3,4列為文件屬主讀,寫(xiě),執(zhí)行的訪問(wèn)標(biāo)識(shí),如第2列為-則不可讀,為r 則表示可讀。
          第5,6,7列為文件所屬組用戶的讀,寫(xiě),執(zhí)行的訪問(wèn)標(biāo)識(shí)。
          第8,9,10列為其它組用戶的讀,寫(xiě),執(zhí)行的訪問(wèn)標(biāo)識(shí)。
          第2個(gè)域?yàn)樵撐募倪B接數(shù),如果某目錄文件的連接數(shù)越大,其子目錄數(shù)就越多。
          第3個(gè)域?yàn)樵撐募膶僦鳌?
          第4個(gè)域?yàn)樵撐募膶俳M。
          第5個(gè)域?yàn)樵撐募拇笮 ?
          第6個(gè)域?yàn)樵撐募膭?chuàng)建時(shí)間。
          第7個(gè)域?yàn)樵撐募奈募?
          第8個(gè)域如果不空的活,則為該文件所連接文件路徑。
          4.6.2 改變文件訪問(wèn)屬性
          $ chmod nnn file
          $ chmod [ugo][+-][rwx] file
          4.6.3 改變文件屬主
          $ chown user file
          $ chown user:group file
          4.6.4 改變文件屬組
          $ chgrp group file
          4.6.5 更新文件訪問(wèn)時(shí)間
          $ touch file
          5 命令,重定向,管道和過(guò)濾器
          5.1 命令格式
          cmd  [ [-option [option value] …] [parameter1] [parameter2]….
          每一條Shell命令由一個(gè)命令動(dòng)詞或文件名開(kāi)始,可以跟一個(gè)或多個(gè)命令選項(xiàng),一個(gè)或多個(gè)命令叁數(shù),按回車(chē)將命令提交到系統(tǒng)。大部分UNIX命令是一個(gè)可執(zhí)行文件,位于環(huán)境變量PATH或path所指示的路徑中。命令也可以是shell內(nèi)部命令,命令還可以是自己編譯連接的可執(zhí)行文件或命令踋本(批處理)文件。一個(gè)命令行可以有65536個(gè)字符,如果一行寫(xiě)不完,可用\符號(hào)續(xù)行,在命令行中可以采用*和%等通配符。
          ls
          ls –l
          ls –l /usr
          ls –l /etc/host*
          在一個(gè)命令行中可以輸入多個(gè)命令,但必須用分號(hào)分隔開(kāi)。
          cd /usr/users/user01; ls –l; pwd
          5.2 重定向
          在缺省情況下,命令的輸入是標(biāo)準(zhǔn)輸入設(shè)備鍵盤(pán),輸出是標(biāo)準(zhǔn)輸出設(shè)備如終端顯示器,可以通過(guò)>和<將命令的輸出和輸入重定向到文件或其它設(shè)備。
          $ ls –l >dir.txt
          $ more < .login
          $ echo “” > /usr/sybase/sybase.log
          在缺省情況下,使用>將命令寫(xiě)到某文件中,如該文件不存在,本命令創(chuàng)建該文件,如果該文件存在,該文件的內(nèi)容被本命令的輸出結(jié)果覆蓋。如果使用>>符號(hào),則命令的輸出被添加到該文件的后面。
          5.3 管道和過(guò)濾器
          UNIX命令管理將一個(gè)命令的輸出作為另一個(gè)命令的輸入,在同一個(gè)命令行中有多個(gè)命令,后一個(gè)命令處理前一個(gè)命令的輸出。
          ps –ef|grep oracle
          以上命令查找命令行或用戶名中含有字符串oracle的輸出。 ps –ef命令輸出系統(tǒng)中所有進(jìn)程的長(zhǎng)格式信息,通過(guò)grep oracle命令處理后,不包括oracle的行全部被過(guò)濾掉了。象grep這種命令叫過(guò)濾器。其它過(guò)濾器命令如下:
          wc   統(tǒng)計(jì)字?jǐn)?shù),行數(shù),詞數(shù)
          grep   按正規(guī)表達(dá)式進(jìn)行模式檢索
          -i  不區(qū)別大小寫(xiě)
          -v  不匹配的行
          -n   行前加行號(hào)
          -c   只輸出行數(shù)
          -l   只輸出匹配的文件名
          fgrep   只是字符串,含特殊字符時(shí)高速
          grep   有限制的規(guī)則表達(dá)式,比較快
          cgrep   完全正則表達(dá)式,功能最全
          cut
          -f   域
          -d  分隔符
          -b
          colum   刪列
          colum 3.5,textfuke  刪掉  3~9列
          sort  -b cdfmnru  +關(guān)健字開(kāi)始位置-關(guān)健字結(jié)束位置,輸入文件
          -f   不區(qū)別大小寫(xiě)
          -m只合并
          -r  降序
          -u  多個(gè)相同行只輸出1行
          uniq  多個(gè)重復(fù)行歸納為1行
          join [-an.][-e串][-j(n)(m)][-o字段][-t字符]文件1文件2
          -a與文件<n>不匹配的全輸出n=1,2
          -e  無(wú)對(duì)應(yīng)字段時(shí)輸出指定串
          -jnm   將文件n的第m個(gè)字段作關(guān)鍵字進(jìn)行連接
          -o


          6 UNIX命令匯總
          6.1 alias     別名     ksh、csh命令
          alias  顯示所有當(dāng)前命令的別名
          alias name  顯示別名為name的命令
          alias name cmd  置cmd命令的別名為name csh
          alias name=cmd  置cmd命令的別名為name ksh
          6.2 unalias   取消別名
             unalias name
          6.3 bg %jobid  恢復(fù)掛起的作業(yè)到后臺(tái)運(yùn)行
          6.4 cal  顯示當(dāng)前日的月歷
             cal [[month]year]
             cal    2  1996
          6.5 chown owner file  改變文件屬性
             chown -h(huán)  改變一文件鏈的屬性
             chmod.chgrp
          6.6 啟動(dòng)一個(gè)cshell命令解釋程序
            csh
          6.7 date  顯示和設(shè)置日期
             date mmddhhmm.yy設(shè)置月日時(shí)分年
          6.8 echo string 在標(biāo)準(zhǔn)輸出上回顯string
          6.9 env  顯示環(huán)境變量
          env name=value  置環(huán)境變量name值為value
          setenv
          setenv name=value  unsetenv name
          6.10 exit 結(jié)束用戶登錄
          6.11 export variable
          在sh 和ksh下用戶變量export后才可成為全局變量
          6.12 fg %jobid將掛起的作業(yè)調(diào)入前臺(tái)執(zhí)行
          6.13 fmt file 簡(jiǎn)單正文格式化
             fmt –w width  文件輸出的行寬為width
               fmt –c  頂部對(duì)齊
               fmt –s  防止短行合并輸出
          6.14 head file  顯示文件頭部10行
          head –n file  顯示頭部n 行
          6.15 history 顯示以前被執(zhí)行過(guò)的命令csh ,ksh 
          6.16 jobs 顯示所有運(yùn)行的任務(wù)
          在命令行尾加&使作業(yè)在后臺(tái)執(zhí)行
          正在執(zhí)行作業(yè)時(shí)按ctrl-z (csh)使作業(yè)掛起
          然后可用jobs,fg,bg等命令
          6.17 kill pid  給進(jìn)程發(fā)中止信號(hào)
          kill-g pid 強(qiáng)制殺除進(jìn)程
          6.18 ksh 啟動(dòng)ksh 命令解釋程序
          ksh
          6.19 more 命令
          more  file   分頁(yè)顯示file 內(nèi)容
          more –c    顯示前清屏
          more –s    多個(gè)空行壓縮為1行
          子命令
          按空格:向前翻1屏
          按回車(chē):向前滾1行
          b    回翻1屏
          G    到多少行,缺省第1行   nG  到第n行
          P%  到百分之一      np 到第n%處
          m    標(biāo)記一個(gè)位置     m[a-z]  命名位置
          ‘     返回標(biāo)記的位置   ‘[a-z]
          v     運(yùn)行editor  編輯文件
          /.?   找一串
          q   exit
          :n   跳到下一文件
          :p    前1文件
          6.20 news 查看新消息
          news –a  顯示所有新消息狀態(tài)
          news –n  顯示所有新消息狀態(tài)
          6.21 nice cmd  以低于正常優(yōu)先執(zhí)行命令
          nice =n cmd  設(shè)置優(yōu)先級(jí)
          6.22 mohup cmd  cmd 命令執(zhí)行時(shí)不掛起
          6.23 r    ksh 下重執(zhí)行前1個(gè)命令
          6.24 resume  %jobid  啟動(dòng)被掛起的作業(yè)
          6.25 script file
             將輸出、輸入到終端的信息同時(shí)寫(xiě)入文件中,script –a    同時(shí)寫(xiě)入文件中,-a是添加。
          6.26 set   顯示當(dāng)前變量值
          set name=value 
          uset name
          6.27 sh 啟動(dòng)bsh 
          sh
          6.28 spell file  查找文件的拼寫(xiě)錯(cuò)誤
          spell –b   美國(guó)英語(yǔ)拼寫(xiě)
          6.29  stop %jobid  掛起正在運(yùn)行的作業(yè)
          6.30  stty  顯示設(shè)置終端選項(xiàng)
             sttt –a 顯示當(dāng)前終端所在選項(xiàng)
             stty –g  顯示當(dāng)前設(shè)置,格式可作為stty實(shí)參
                line speed 置波特率
             -t type  終端類(lèi)型
             columns n  設(shè)置列數(shù)
          6.31 tail file  顯示文件最后10行
          tail –n file  顯示文件最后n 行
          6.32 tee file  將輸入復(fù)制到輸出及文件file中
          tee –a file  添加到file 尾
          6.33 touch file  更新文件的存取時(shí)間
          touch –a   只更新訪問(wèn)時(shí)間
          touch –m  只更新修改時(shí)間
          touch –c  防止建立以前不存在的文件 
          7 ed 編輯器
          ed file 
          出錯(cuò)時(shí),h提供簡(jiǎn)單幫助信息,H提供詳細(xì)幫助信息,用a,c,I進(jìn)入輸入方式,在單獨(dú)一行上用,回到命令格式保存文件w.   Wq =x 
          p  .p 顯示當(dāng)前行
          =  顯示當(dāng)前行的行號(hào)
          np  顯示第n 行
          1,6p  顯示1-6行
          $p   顯示最后一行
          1,$p顯示所有行
          +  顯示下一行
          - 顯示上一行
          n  顯示當(dāng)前行及行號(hào)
          nn  顯示第n行及行號(hào)
          x,yn  顯示x—y行及行號(hào)
          l   顯示當(dāng)前行包括非打印字符
          d   刪除當(dāng)前行
          u   取消最后命令
          s /str1/str2   用 str2 取代str1
          s/str1//    刪除str1
          2s/str1/str2/n   第2 行的str1改為str2并顯示修改后的行
          s/str1/str2/g   全程替換
          <first>,<end>m<line>
          2,4m6    第2—4行移到第6行之后
          t 塊拷貝格式同m
          r file  將文件讀到當(dāng)前行后
          <first>,<end> w file   寫(xiě)塊到文件
          !cmd   執(zhí)行shell命令
          /模式/   正向查找命令
          ?模式?反向查找命令
          //  繼續(xù)找第2個(gè)
          g/the/p   全程查找并顯示
          g/the/s/the/that/   全程查找the并用that代替the 
          v與g命令相反
          v/the/n   全程查找不包含the 并顯示
          無(wú)字符
          ^代表行首   $行尾    .任意字符   *任意多個(gè)與前面相同字符
          /A….B/   以A開(kāi)關(guān)B結(jié)尾中間3個(gè)任意
          . s/. /.     第1個(gè) . 當(dāng)前行
                   第2 個(gè) . 任意字符
                   第3個(gè) . 字符
          s/xx*/y/   用y代替2個(gè)或2個(gè)以上的x
          s/x*y/y/   用y代替以x開(kāi)頭以y結(jié)束的所有字符
          &代表第1個(gè)模式內(nèi)容
          /模式1/(模式1)/=/模式1/(&)/
          [xz]表示x或z
          [0-9]表示0-9的任意數(shù)字
          8  vi編輯器 
          vi file         vi -r 只讀模式    vi -r  恢復(fù)  -wnumber 指定窗                口大小
          vi +67 file      光標(biāo)停在第67行
          命令模式   i,I,o,O,a,A進(jìn)入輸入模式,;/?最后一行模式
          最后一行模式
          :q  退出  :w寫(xiě)文件  :wq存盤(pán)退出    :q!  Quit  :x存盤(pán)退出
          命令模式     zz存盤(pán)退出   如未修改不存盤(pán)退出
          移動(dòng)光標(biāo)
          l   空格 右         w  W  下詞詞首    5w  前移5個(gè)詞
          h   ^H 左         e  E  詞尾或標(biāo)點(diǎn)
          j   ^N 下         b  B  返回詞首
          k   ^P 上         )    下句句首
          0   行首        (    上句句首
          &  行尾         }    下段句首
          +  下行行首   {    上段名首
          -  上行行首   ]]   下區(qū)第1字符
          [[    上區(qū)第1字符
            H 光標(biāo)到屏幕布頂部
          M 光標(biāo)到屏幕布中部
          L 光標(biāo)到屏幕布底部
          ctrl -F  向前一屏
          ^D  向前半屏
          ^B  向后一屏
          ^U  向后半屏
          ^Y  向上滾1行
          ^E  向下滾1行
          G   文件尾, nG到第n 行
          z+  向上翻頁(yè)
          z^ 向下翻頁(yè)
          z. 當(dāng)前行到中間
          z-   當(dāng)前行到底部
          rn   用字符n代替當(dāng)前字符
          3rn  用n代替當(dāng)前3個(gè)字符
          Rstring ESC  用輸入串代替當(dāng)前字符
          cw string ESC 用string代替當(dāng)前光標(biāo)到詞尾的串
          5cw string ESC  用string代替當(dāng)前光標(biāo)到第5個(gè)詞尾的串
          cb,CB string ESC用string替換詞首到當(dāng)前光標(biāo)位置的串
          c&string ESC 用string替換到行尾的字串
          s刪當(dāng)前字符并開(kāi)始輸入正文
          S 刪當(dāng)前行并開(kāi)始輸入正文
            ~  改變當(dāng)前字符大小寫(xiě)
          x  刪當(dāng)前字符
          X  刪當(dāng)前字符左邊的字符
            dw  刪光標(biāo)到詞尾的串
            d :return=dd   刪兩行
              d [[    刪光標(biāo)到區(qū)首
            D=d&
          fn   移到跟當(dāng)前光標(biāo)后面的“n”字符處
          Fn   移到跟當(dāng)前光標(biāo)前面的“n”字符處
          fn   移到跟當(dāng)前光標(biāo)后面的“n”字符前一列
          Fn   移到跟當(dāng)前光標(biāo)前面的“n”字符后一列
            ;  繼續(xù)f,F,t,T查找
            ,  反向f,F,t,T查找
            :addr    到指定行
            :set nu   當(dāng)前緩沖區(qū)加行號(hào)
            m [a-z]   做標(biāo)記
            ‘a    返回原記號(hào)處
            ecol   定位到指定行
            J   光標(biāo)所在行與下行合并
            u   取消前次操作
          U     光標(biāo)未離開(kāi)當(dāng)前行之首,取消從光標(biāo)移來(lái)所做的修改
            p   將緩沖區(qū)內(nèi)容插入光標(biāo)右邊,添加新行
          :e!    取消最后一次寫(xiě)文件以來(lái)所做的所有修改
          .  重復(fù)上一個(gè)命令
          9 圖形界面
          9.1 進(jìn)入系統(tǒng)
           
          在此輸入用戶名,按回車(chē)
           
          在此輸入口令,按回車(chē)進(jìn)入系統(tǒng)




          在此可選擇你所熟悉的語(yǔ)言環(huán)境
           

           
          進(jìn)入系統(tǒng)后,可用dtterm,DECterm,Xterm等仿真終端,輸入U(xiǎn)NIX命令。

          9.2 終端仿真  dtterm  Decterm
           
          9.3 輸入法設(shè)置
           
          選擇默認(rèn)輸入法,指定啟動(dòng)和停止輸入法的熱鍵,各種輸入法的切換熱鍵。退出系統(tǒng)并重新登錄后,設(shè)置生效。
          9.4 編輯器
           
          操作與PC機(jī)Notepad完全相同
          9.5 其它X實(shí)用程序
          在程序組中有多級(jí)程序組。
          10 編程
          10.1 DEC  FORTRAN
          F77  [option]  filename  [option]
          源文件以.f,.for,.FOR結(jié)尾
          目標(biāo)文件以.o結(jié)尾
          .F結(jié)束的文件必須先用C予處理程序處理
          .r和.E解釋為ratfor或ef1源程序
          被 cpp予處理過(guò)的源程序
          .options
          -o output   生成目標(biāo)文件名
          -v     生成l列表文件
          -w1    列警告信息,包括未被使用的變量
          -W
          -cross-reference   列表中含交叉索引
          -c     強(qiáng)制生成目標(biāo)文件,而不生成或執(zhí)行代碼
          -d-lines   編譯第1列為D的行
          -go     無(wú)符號(hào)信息
          -g1     應(yīng)跟蹤信息,行信息缺省
          -g2或-g  應(yīng)符號(hào)調(diào)試信息和跟蹤信息自設(shè)置 O。
          -g3   應(yīng)符號(hào)調(diào)試信息和跟蹤信息但調(diào)試信息不精確
          -machine-code   在列表中顯示機(jī)器語(yǔ)言信息
          -o0    無(wú)優(yōu)化
          -o1    局部?jī)?yōu)化
          -o2    全局優(yōu)化包含o1
          -o3    附加全局優(yōu)化包含o2
          -o4或o包含內(nèi)部行擴(kuò)展包含o3
          -o5  軟件管道優(yōu)化
          -om    連接后優(yōu)化
          -tune generic ︱host︱ev4︱ev5
          改進(jìn)針對(duì)本機(jī)或本cpu的性能,其它c(diǎn)pu下降
          -show code  顯示機(jī)器代碼
          -show include  顯示include文件中語(yǔ)句
          -show nomap   無(wú)符號(hào)表示
          -show xvef 
          -warn argument-checking
          -warn declaretions
          -warn noalignments
          -worn nogenerl
          -warn nouncalled
          -warn nouninitialized
          -warn nounreachable
          -warn truncated-sourse
          -warn unused
          -convert cray
          -convert IBM
          10.2 dbx技巧
          dbx和ladebug都是UNIX下調(diào)試程序
          ladebug是DEC開(kāi)發(fā)的增強(qiáng)型符號(hào)調(diào)試程序
          ladebug  a.out
          help   查看聯(lián)機(jī)幫助
          help cmd 
          alias    查看和設(shè)置別名
          print   顯示變量或內(nèi)存串值 
          ox140001000/100x  轉(zhuǎn)貯內(nèi)存
          x 長(zhǎng)字  xx雙字  x字  s串  c字符  I機(jī)內(nèi)代碼
          where   在堆棧中尋找變量值
          ro   為函數(shù)返回值
          r16  函數(shù)變量1
          r17  函數(shù)變量2

          r20  函數(shù)變量5
          多于5個(gè)變量被壓入棧
          assign   改變內(nèi)存值 
          print* (long *) ox11fffff20
          ox632f73756c  70322d
          assign  ox11fffff20=17
          ox17
          print* (long *)ox11fffff20
          ox17
          stop in      stop  in  
          stopat
          file
          step   stepi
          next   nexti
          cont  conti
          w    wi
          l    li
          程序代碼位置   ox120000000
          數(shù)據(jù)代碼     ox140000000
          set  &hexin=1     所在輸入均為16進(jìn)制
          set  &hexints=1   所在輸出均為16進(jìn)制
          &curpc
          &curline
          use  /dir1/dir2/…
          startddr,endaddr/mode
          startddr,endaddr/count mode
          d  10進(jìn)制word
          D  10進(jìn)制long
          o八進(jìn)制word
          O 八進(jìn)制long
          x 十六進(jìn)制 word
          X 十六進(jìn)制 long
          b  八進(jìn)制  byte
          c  字符   byte
          s   串    Asciz
          f  單精度  real
          g  雙精度  real 
          i  反匯編  指令
          # 解釋
          !string   ?string  串查找
          alias ,unalias
          予定義的別名
          a  assign  f   func
          b  stop at  h   history
          bp stop in   j status
          d  delete  li &curpc/10I;&curpc=&curpc+40
          l  list
          n   next            q    quit
          u:  nexti            r   rerun
          p   print           ri   record input
          pd  printf  “%d”    ro  recond ouput
          po  printf “%o”      s    step
          pr  printregs        si   stepi
          ps  printf “%s”      u  list  &curline-9:10
          px  printf “ox%x”    w list &curline-5:10
          wi &curpc-20/10i     W list &curline-10:20
          what is  變量       delet all
          where is   變量      file
          which    變量      goto line
          patch f00=20  
          patch f00=20          catch ignore信號(hào)
          trace    at           set,useset
          return              source 文件名 
          attach
          dbxinit 文件,初始化命令,設(shè)置,
          10.3 make ,makefile, Makefile  s.makefile
          例:persee:persee.for  cudl:a.o   l:b.o
                   f>>-c-g-i8-r8-dorble-size128-g\
                    -convert=cray persee.for cudl:u.0  l:b.0
          cndl:u.o:cndl:u.for
             f>>-c-g-i8-r8-double-size128-convert=cray\cndliu.for
          l:b.o:lb.for
             f>>-c-g-i8-r8-double-size128-convert=cray\l:b.for
          make  -b   兼容老版makefile
          -d     Debug 模式
          -f makefile
          l:b:l:b(file1.0)l:b(file2.0) l:b(file3.0)
          .c.a:
             &(cc)-c&(CFLAGS1)&<
             ar  rv $@  $*.0
             rm-f  $*.0
          10.4 使用軟盤(pán)
          n 軟盤(pán)文件系統(tǒng)
          $ fddisk   -fmt   /dev/rfdoa
          $ fddisk   -fmt  -f  /dev /rfdoc
          $ newfs   /dev/fd0c   rx23
          $ mount  /dev/fd0c  /mnt
          $ cp  file /mnt
          $ umont  /mnt
          n DOS格式軟盤(pán)
          # ln –s /dev/rfd0c /dev/fddrive
          $ /usr/bin/mtools/mdir
          $ /usr/bin/mtools/mcopy file a:
          n 原始格式
          $ tar cvf /dev/rfd0a mydirs
          11 UNIX藝術(shù)
          對(duì)UNIX使用時(shí)間越長(zhǎng),對(duì)UNIX的了解就越深入,剛開(kāi)始使用時(shí),每天都有新的發(fā)現(xiàn),二三年以后逐漸開(kāi)成自己的風(fēng)格。
          使用UNIX是一種藝術(shù)享受,而不是攔路虎,通向藝術(shù)之路。
          11.1 選擇你鐘愛(ài)shell
             每一種shell都是進(jìn)入時(shí)初始執(zhí)行文件。
             sh     ksh       profile
             csh               login       cshrc
            /etc下             csh.login    所有csh用戶進(jìn)入時(shí)初始化
          設(shè)置環(huán)境變量
          設(shè)置path和manpath
          設(shè)置終端參數(shù)
          執(zhí)行用戶命令
          賦置別名
          例:  csh                保存歷史
                .login                           set savehist=40
               set term=vt320                   set proupt=“hostmane\!.”
               set editmode=emacs  
               set prompt=“‘whomni’ @‘hostname’\!>”
               set history=100
               setenv  lang=zh.cn
             Ksh profile
             SYBASE=/usr/sybase
             DS2UERY=SYBASE
             EXPORT.SYBASE DS2UERY
          alias   別名
          alias  dir   ls 
          alias  type  cat
          alias  move “mu-i”
          alias   del  rm
          alias   md  mkdir
          alias   rd  rmdir
          alias  deltree  “rm –r”
          alias  ren  mv
          alias  cipy  “cp-i”
          alias  xcopy  “cp-r”
          11.2 使目錄間轉(zhuǎn)換更容易
          set cdpath=(/usr/rsers/rser1/persee  /usr/users/user1/conpate/mut  /usr/examples/motif/cpuinfo)
          %pwd
          %/usr/users/user1
          %cd mut
          %pwd
          %/mut
          %cd persee
          %pwd 
          /usr/users/user1/persen
          pushd   popd   dirs
          pwd 
          /usr/inolude
          poshd  sys
          pwd /usr/include/sys
          pushd /usr/users/user01
          popd +1
          pwd
          11.3 電子郵件來(lái)時(shí)通知
          unset mail 
          biff y  xbiff


          12 TCP/IP網(wǎng)絡(luò)簡(jiǎn)介
          12.1 IP地址
             ping  195.1.1.1
             ftp   195.1.1.1
             telnet   195.1.1.1
          使用機(jī)器名,hosts中維持1個(gè)名稱(chēng)和地址轉(zhuǎn)換數(shù)據(jù)庫(kù)格式
          195.1.1.0 網(wǎng)絡(luò)名
          195.1.1.1 主機(jī)名
          12.2 ftp  使用
              ftp   主機(jī)/地址
                  user
                 password
          ascii  binary  cd  lcd  pwd  ls  lpwd  get  put  mget  mput  prompt  vervose  bye  oper  bye  close  help
          12.3  telnet終端仿真
          telnet hostname
          Digital UNIX (dec3000.newdesign.com.cn) (ttyp1)
          login: user1
          passwd:
          $
          設(shè)置終端屬性:
          $ TERM=vt100
          $ export TERM
          $ stty erase ‘^?’
          12.4   X終端仿真
          Huminbird Exceed
          執(zhí)行Xconfig,選擇Communication->XDMCP-broadcast->OK,啟動(dòng)EXCEED,可以看到UNIX主機(jī)已在列表中。點(diǎn)擊進(jìn)入。
          eXcursion
          執(zhí)行eXcursion control panel選擇XDMCP->Enable XDMCP->選擇XDMCPbroadcast,啟動(dòng)eXcursion,點(diǎn)擊進(jìn)入想連接的UNIX主機(jī)。

          13 UNIX的批處理 Shell Script
          13.1 前言
              在DOS 中,你可能會(huì)從事一些例行的重覆性工作,此時(shí)你會(huì)將這些重覆性的命令寫(xiě)成批次檔,只要執(zhí)行這個(gè)批次檔就等於執(zhí)行這些命令。大家會(huì)問(wèn)在UNIX中是否有批次處理這個(gè)東東,答案是有的。在UNIX中不只有如DOS 的批次處理,它的功能比起DOS 更強(qiáng)大,相對(duì)地也較復(fù)雜,已經(jīng)和一般的高階語(yǔ)言不相上下。在UNIX中大家都不叫做批次檔,而叫做Shell Script。
              一般而言,Shell Script的地位和其它的可執(zhí)行檔(或命令)是完全相同的,只不過(guò)Shell Script是以文字檔的方式儲(chǔ)存,而非二進(jìn)位檔。而執(zhí)行Shell Script時(shí),必須有一個(gè)程式將其內(nèi)容轉(zhuǎn)成一道道的命令執(zhí)行,而這個(gè)程式其實(shí)就是Shell ,這也就是為什麼我們叫做Shell Script的原因(往後我們稱(chēng)為Script)。不同Shell 的Script基本上會(huì)有一些差異,所以我們不能將寫(xiě)給A shell 的Script用B shell 執(zhí)行。而在UNIX中大家最常使用Bourne Shell以及C Shell ,所以這堂課就介紹這兩種Script的寫(xiě)法。

          13.2 將文字檔設(shè)為可執(zhí)行的Shell Script
              如果我們已經(jīng)寫(xiě)好Script,如何將其設(shè)成可執(zhí)行檔呢?因?yàn)镾cript其實(shí)是一個(gè)可執(zhí)行檔,所以必須將其存取權(quán)設(shè)定成可執(zhí)行。我們可以使用下列命令更改存取權(quán):
                  chmod u+x filename      只有自己可以執(zhí)行,其它人不能執(zhí)行
                  chmod ug+x filename     只有自己以及同一群可以執(zhí)行,其它人不能執(zhí)行
                  chmod +x filename       所有人都可以執(zhí)行
              而我們?nèi)绾沃付ㄊ褂媚且粋€(gè)Shell 來(lái)解釋所寫(xiě)的Script呢?幾種基本的指定方式如下所述:
          1. 如果Script的第一個(gè)非空白字元不是"#",則它會(huì)使用Bourne Shell。
          2. 如果Script的第一個(gè)非空白字元是"#"時(shí),但不以"#!"開(kāi)頭時(shí),則它會(huì)使用C Shell。
          3. 如果Script以"#!"開(kāi)頭,則"#!"後面所寫(xiě)的就是所使用的Shell,而且要將整個(gè)路徑名稱(chēng)指出來(lái)。
          這里建議使用第三種方式指定Shell ,以確保所執(zhí)行的就是所要的。Bourne Shell的路徑名稱(chēng)為/bin/sh ,而C Shell 則為/bin/csh。
          <eg>



          1. 使用Bourne Shell






                  2. 使用C Shell






                  3. 使用/etc/perl
                     






              除了在Script內(nèi)指定所使用的Shell 外,你也可以在命令列中強(qiáng)制指定。比如你要用C Shell 執(zhí)行某個(gè)Script,你可以下這個(gè)命令:
                  csh filename
          此時(shí)的Script的存取權(quán)就不一定要為可執(zhí)行檔,其內(nèi)部所指定的Shell 也會(huì)無(wú)效,詳細(xì)的情形後面會(huì)討論。

          13.3 Script的基本結(jié)構(gòu)及觀念
              Script是以行為單位,我們所寫(xiě)的Script會(huì)被分解成一行一行來(lái)執(zhí)行。而每一行可以是命令、注解、或是流程控制指令等。如果某一行尚未完成,可以在行末加上"\" ,這個(gè)時(shí)候下一行的內(nèi)容就會(huì)接到這一行的後面,成為同一行,如下
                  





              當(dāng)Script中出現(xiàn)"#" 時(shí),再它後面的同一行文字即為注解,Shell 不會(huì)對(duì)其翻譯。
              在Script中要執(zhí)行一個(gè)命令的方法和在命令列中一樣,你可以前景或背景執(zhí)行,執(zhí)行命令時(shí)也會(huì)需要設(shè)定一些環(huán)境變數(shù)。
              Script的流程控制和一般高階語(yǔ)言的流程控制沒(méi)有什麼兩樣,也和高階語(yǔ)言一樣有副程式。這些使得Script的功能更加強(qiáng)大。
              為了達(dá)到與高階語(yǔ)言相同的效果,我們也可以在Script中設(shè)定變數(shù),如此使Script成為一個(gè)名付其實(shí)的高階語(yǔ)言。

          13.4 Bourne Shell
          13.4.1 變數(shù)
              Bourne Shell的變數(shù)型態(tài)只有字串變數(shù),所以要使用數(shù)值運(yùn)算則必須靠外部命令達(dá)成目的。而其變數(shù)種類(lèi)有下列幾種:
          1) 使用者變數(shù)
                  這是最常使用的變數(shù),我們可以任何不包含空白字元的字串來(lái)當(dāng)做變數(shù)名稱(chēng)。
                  設(shè)定變數(shù)值時(shí)則用下列方式:
                      var=string
                  取用變數(shù)時(shí)則在變數(shù)名稱(chēng)前加上一"$" 號(hào)。
                  <eg>






                      結(jié)果如下:
                      name
                      Tom
          2)     系統(tǒng)變數(shù)(環(huán)境變數(shù))
                  和使用者變數(shù)相似,只不過(guò)此種變數(shù)會(huì)將其值傳給其所執(zhí)行的命令。要將一使用者變數(shù)設(shè)定為系統(tǒng)變數(shù),只要加上:
                      export var
                  <eg>




                      ┌———————┐

                  以下是使用者一進(jìn)入系統(tǒng)之後就已設(shè)定好的系統(tǒng)變數(shù):
                      $HOME       使用者自己的目錄
                      $PATH       執(zhí)行命令時(shí)所搜尋的目錄
                      $TZ         時(shí)區(qū)
                      $MAILCHECK  每隔多少秒檢查是否有新的信件
                      $PS1        在命令列時(shí)的提示號(hào)
                      $PS2        當(dāng)命令尚未打完時(shí),Shell 要求再輸入時(shí)的提示號(hào)
                      $MANPATH    man 指令的搜尋路徑
          3)     唯讀的使用者變數(shù)
                  和使用者變數(shù)相似,只不過(guò)這些變數(shù)不能被改變。要將使用者變數(shù)設(shè)成唯讀的,只要加上:
                      readonly var
                  而若只打readonly則會(huì)列出所有唯讀的變數(shù)。還有一點(diǎn),系統(tǒng)變數(shù)不可以設(shè)定成唯讀的。
                  <eg>








                      結(jié)果如下:
                      Tom
                      name: is read only
                      readonly name
                      readonly ......
          4)      特殊變數(shù)
                  有些變數(shù)是一開(kāi)始執(zhí)行Script時(shí)就會(huì)設(shè)定,并且不以加以修改,但我們不叫它唯讀的系統(tǒng)變數(shù),而叫它特殊變數(shù)(有些書(shū)會(huì)叫它唯讀的系統(tǒng)變數(shù)),因?yàn)檫@些變數(shù)是一執(zhí)行程式時(shí)就有了,況且使用者無(wú)法將一般的系統(tǒng)變數(shù)設(shè)定成唯讀的。以下是一些等殊變數(shù):
                            這個(gè)程式的執(zhí)行名字
                      $n      這個(gè)程式的第n個(gè)參數(shù)值,n=1..9
                      $*      這個(gè)程式的所有參數(shù)
                      $#      這個(gè)程式的參數(shù)個(gè)數(shù)
                      $$      這個(gè)程式的PID
                      $!      執(zhí)行上一個(gè)背景指令的PID
                      $?      執(zhí)行上一個(gè)指令的返回值
                  當(dāng)你執(zhí)行這個(gè)程式時(shí)的參數(shù)數(shù)目超過(guò)9 個(gè)時(shí),我們可以使用shift 命令將參數(shù)往前移一格,如此即可使用第10個(gè)以後的參數(shù)。除此之外,我們可以用set 命令改變$n及$*,方法如下:
                      set string
                  如此$*的值即為string,而分解後則會(huì)放入$n。如果set 命令後面沒(méi)有參數(shù),則會(huì)列出所有已經(jīng)設(shè)定的變數(shù)以及其值。
                  <eg>
          檔名:ex1  參數(shù):this is a test














                      結(jié)果如下:
                      Filename: ex1
                      Arguments: this is a test
                      No. of args.: 4
                      2nd arg.: is
                      No. of args.: 3
                      2nd arg.: a
                      Arguments: hello, everyone
                      2nd arg.: everyone
              值得一提的是,當(dāng)你想從鍵盤(pán)輸入一變數(shù)值時(shí),你可以使用下面的命令:
                  read var1 var2.....
              這時(shí)read會(huì)將一個(gè)字分給一個(gè)變數(shù)。如果輸入的字比變數(shù)還多,最後一個(gè)變數(shù)會(huì)將剩下的字當(dāng)成其值。如果輸入的字比變數(shù)還少,則後面的變數(shù)會(huì)設(shè)成空字串。
                  如果需要處理數(shù)值運(yùn)算,我們可以使用expr命令。其參數(shù)及輸出列於附錄A。
          13.4.2 執(zhí)行命令
              在Bourne Shell中有五種方法執(zhí)行一個(gè)命令,而這五種方式所產(chǎn)生的果有些許的不同。
          1) 直接下命令
                  這個(gè)方式和在命令列中直接下命令的效果一樣。
          2) 使用sh命令
                      sh command
                  這個(gè)檔案必須是Bourne Shell的Script,但這個(gè)檔案并不一定要設(shè)成可執(zhí)行。
                  除此之外和直接下命令的方式一樣。
          3) 使用"."命令
                      . command
                  這時(shí)和使用sh命令相似,只不過(guò)它不像sh一般會(huì)產(chǎn)生新的process ,相反地,它會(huì)在原有的process 下完成工作。
          4) 使用exec命令
                      exec command
                  此時(shí)這個(gè)Script將會(huì)被所執(zhí)行的命令所取代。當(dāng)這個(gè)命令執(zhí)行完畢之後,這個(gè)Script也會(huì)隨之結(jié)束。
          5) 使用命令替換
                  這是一個(gè)相當(dāng)有用的方法。如果想要使某個(gè)命令的輸出成為另一個(gè)命令的參數(shù)時(shí),就一定要使用這個(gè)方法。我們將命令列於兩個(gè)"`" 號(hào)之間,而Shell 會(huì)以這個(gè)命令執(zhí)行後的輸出結(jié)果代替這個(gè)命令以及兩個(gè)"`" 符號(hào)。
                  <eg>
                      str='Current directory is '`pwd`
                      echo $str
                      結(jié)果如下:
                      Current directory is /users/cc/mgtsai
                      這個(gè)意思是pwd 這個(gè)命令輸出"/users/cc/mgtsai",而後整個(gè)字串代替原來(lái)的`pwd` 設(shè)定str 變數(shù),所以str 變數(shù)的內(nèi)容則會(huì)有pwd 命令的輸出。

                  <eg>
                      number=`expr $number + 1`
                這就是先前所提要作數(shù)值運(yùn)算的方法,基本上expr命令只將運(yùn)算式解,而後輸出到標(biāo)準(zhǔn)輸出上。如果要將某變數(shù)設(shè)定成其值,非得靠命令替換的方      式不可。這個(gè)例子是將number變數(shù)的值加1 後再存回number變數(shù)。
          13.4.3 流程控制
              在介紹流程控制之前,我們先來(lái)看看test命令。test命令的參數(shù)是條件判斷式,當(dāng)條件為真時(shí)則傳回非零值,而條件為偽時(shí)則傳回零。在所有的流程控制都必須用到test命令來(lái)判斷真?zhèn)巍6鴗est命令的使用方法則列於附錄B。
              <eg>
                  test $# = 0
               如果執(zhí)行這個(gè)程式?jīng)]有參數(shù)時(shí),會(huì)傳回非零值代表"$# = 0"這個(gè)條件成立。反之則會(huì)傳回零。
              以下介紹各種流程控制:
          1) if then
               
                  語(yǔ)法如下
                                                  
          if (condition)               
          then                           
                          then-commands            
                      fi                              
                                                      
                  condition 是一個(gè)test命令。往後所介紹的各種流程中的condition 都是test命令。
                  <eg>
          檔名:chkarg







                      $ chkarg Hello
                      Arg1: Hello
                      $ chkarg
                      $

          2)   if then else
                  語(yǔ)法以及流程圖如下
                                                       │       FALSE
                      if (condition)              <condition>————————┐
                        then                           │TRUE            │
                          then-commands           then-commands    else-commands
                        else                           ├—————————┘
                          else-commands                │
                      fi
          3)    if then elif
                  語(yǔ)法以及流程圖如下
                                                      │       FALSE
                      if (condition1)             <condition1>———┐
                        then                        │TRUE      │      FALSE
                          commands1              commands1  <condition2>┐
                      elif (condition2)                │          │TRUE    │
                        then                       │   commands2    commands3
                          commands2               ├—————┴—————┘
                        else                       │
                          commands3
                          commands3
                      fi
                  <eg>
                      echo 'word 1: \c'
                      read word1
                      echo 'word 2: \c'
                      read word2
                      echo 'word 3: \c'
                      read word3
                      if (test "$word1" = "$word2" -a "$word2" = "$word3")
                        then
                          echo 'Match: words 1, 2, & 3'
                      elif (test "$word1" = "$word2")
                        then
                          echo 'Match: words 1 & 2'
                      elif (test "$word1" = "$word3")
                        then
                          echo 'Match: words 1 & 3'
                      elif (test "$word2" = "$word3")
                        then
                          echo 'Match: words 2 & 3'
                      else
                          echo 'No match'
                      fi
          4)  for in
                  語(yǔ)法以及流程圖如下 
                                   

          posted on 2008-06-25 15:18 Picasso 閱讀(244) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁明县| 杂多县| 卫辉市| 武强县| 盖州市| 河池市| 西贡区| 合川市| 汉中市| 舟山市| 潜山县| 临湘市| 柘城县| 金乡县| 澄江县| 炉霍县| 邵阳市| 县级市| 山东省| 阿拉善盟| 苏尼特右旗| 逊克县| 无极县| 秀山| 英山县| 大兴区| 城口县| 陈巴尔虎旗| 临夏县| 姜堰市| 德昌县| 河北区| 诸城市| 天等县| 石屏县| 吉木萨尔县| 庆城县| 竹北市| 赤城县| 顺义区| 疏勒县|