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) 編輯 收藏