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

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

Chinaunix

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

[學(xué)習(xí)共享] shell 十三問? [復(fù)制鏈接]

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2003-12-09 02:48 |只看該作者 |倒序?yàn)g覽
我在 CU 的日子並不長(zhǎng),有幸在 shell 版上與大家結(jié)緣。
除了跟眾前輩學(xué)習(xí)到不少技巧之外,也?吹讲簧倥笥训膯栴}。
然而,在眾多問題中,我發(fā)現(xiàn)許多瓶頸都源於 shell 的基礎(chǔ)而已。
每次要解說(shuō),卻總有千言萬(wàn)語(yǔ)不知從何起之感...

這次,我不是來(lái)回答,而是準(zhǔn)備了關(guān)於 shell 基礎(chǔ)的十三個(gè)問題要問大家﹗
希望 shell 學(xué)習(xí)者們能夠透過(guò)尋找答案的過(guò)程,好好的將 shell 基礎(chǔ)打紮實(shí)一點(diǎn)...
當(dāng)然了,這些問題我也會(huì)逐一解說(shuō)一遍。只是,我不敢保證甚麼時(shí)候能夠完成這趟任務(wù)。
除了時(shí)間關(guān)係外,個(gè)人功力實(shí)在有限,很怕匆忙間誤導(dǎo)觀眾就糟糕了。
若能拋磚引玉,誘得其他前輩出馬補(bǔ)充,那才真的是功德一件﹗

shell 十三問:

1) 為何叫做 shell ?
http://www.72891.cn/viewthr ... p;page=2#pid1454336
2) shell prompt(PS1) 與 Carriage Return(CR) 的關(guān)係? (2008-10-30 02:05 最後更新)
http://www.72891.cn/viewthr ... p;page=2#pid1467910
3) 別人 echo、你也 echo ,是問 echo 知多少?( 2008-10-30 02:08 最後更新)
http://www.72891.cn/viewthr ... p;page=3#pid1482452
4) " "(雙引號(hào)) 與 ' '(單引號(hào))差在哪?  (2008-10-30 02:07 最後更新)
http://www.72891.cn/viewthr ... p;page=4#pid1511745
5) var=value?export 前後差在哪? (2008-10-30 02:12 最後更新)
http://www.72891.cn/viewthr ... p;page=5#pid1544391
6) exec 跟 source 差在哪? (2008-10-30 02:17 最後更新)
http://www.72891.cn/viewthr ... p;page=6#pid1583329
7) ( ) 與 { } 差在哪?
http://www.72891.cn/viewthr ... p;page=6#pid1595135
8) $(( )) 與 $( ) 還有${ } 差在哪? (2008-10-30 02:20 最後更新)
http://www.72891.cn/viewthr ... p;page=7#pid1617953
9) $@ 與 $* 差在哪?
http://www.72891.cn/viewthr ... p;page=7#pid1628522
10) && 與 || 差在哪? (2008-10-30 02:21 最後更新)
http://www.72891.cn/viewthr ... p;page=7#pid1634118
11) > 與 < 差在哪? (2008-10-30 02:24 最後更新)
http://www.72891.cn/viewthr ... p;page=7#pid1636825
12) 你要 if 還是 case 呢? (2008-10-30 02:25最後更新)
http://www.72891.cn/viewthr ... p;page=8#pid1679488
13) for what? while 與 until 差在哪? (2008-10-30 02:26最後更新)
http://www.72891.cn/viewthr ... p;page=8#pid1692457

補(bǔ)充問題:
b1) [^ ] 跟 [! ] 差在哪?
Part-I(Wildcard): (2008-10-30 02:25 最後更新)
http://www.72891.cn/viewthr ... ;page=16#pid2930144
Part-II(Regular Expression): (2008-10-30 02:26 最後更新)
http://www.72891.cn/viewthr ... ;page=16#pid2934852


--------------
說(shuō)明:
1) 歡迎大家補(bǔ)充/擴(kuò)充問題。
2) 我接觸電腦中文名稱時(shí)是在臺(tái)灣,因此一些術(shù)語(yǔ)或與大陸不同,請(qǐng)自行轉(zhuǎn)換。
3) 我會(huì)不定時(shí)"逐題"說(shuō)明(以 Linux 上的 bash 為環(huán)境)。同時(shí),也會(huì)在任何時(shí)候進(jìn)行無(wú)預(yù)警修改。請(qǐng)讀者自行留意。
4) 本人於本系列所發(fā)表的任文章均可自由以電子格式(非印刷)引用、修改、轉(zhuǎn)載,且不必註明出處(若能註明 CU 更佳)。
當(dāng)然,若有錯(cuò)漏或不當(dāng)結(jié)果,本人也不負(fù)任何責(zé)任。
5) 若有人願(yuàn)意整理成冊(cè)且付印者,本人僅保留著作權(quán),版權(quán)收益之 30% 須捐贈(zèng)與 CU 論壇管理者,剩餘不究。

---------
建議參考討論:
1) shaoping0330 兄關(guān)於變量替換的補(bǔ)充:
(連結(jié)在改版後已經(jīng)失效)

2) shaoping0330 兄關(guān)於 RE 的說(shuō)明:
http://www.72891.cn/forum/viewtopic.php?t=393964

3) 關(guān)於 nested subshell 的討論:
(連結(jié)在改版後已經(jīng)失效)

4) 關(guān)於 IFS 的討論:
http://www.72891.cn/forum/viewtopic.php?t=512925

---------
* 感謝 lkydeer 兄整理 word/pdf 版本方便大家參考:
http://www.72891.cn/viewthr ... &extra=page%3D2

[ 本帖最后由 網(wǎng)中人 于 2008-11-4 02:12 編輯 ]

評(píng)分

參與人數(shù) 2可用積分 +5 信譽(yù)積分 +5 收起 理由
substr函數(shù) + 5 贊一個(gè)!
mocou + 5 精品文章

查看全部評(píng)分

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

shell 十三問?

感謝版主~~ 我也在學(xué)習(xí)Shell編程,開始打個(gè)好基礎(chǔ)。

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
3 [報(bào)告]
發(fā)表于 2003-12-09 07:24 |只看該作者

shell 十三問?

很有“殺傷力”的問題,希望大家踴躍參與,共同商榷!

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

shell 十三問?

好問題!值得仔細(xì)琢磨琢磨...

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

shell 十三問?

暈了~~這些題我一個(gè)也說(shuō)不清楚
    

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

shell 十三問?

只想知道答案。

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

shell 十三問?

關(guān)于第一個(gè)問題,什么是shell

作者:Rick Rummel


介紹
你可以做許多事情而不必知道它們實(shí)際上如何運(yùn)作。比如,你不必懂得發(fā)動(dòng)機(jī)燃燒的物理原理就可以開汽車。缺乏電子知識(shí)也不會(huì)阻止
你用CD機(jī)聽音樂。不知道什么是Shell和它的工作原理,你還是可以使用UNIX。但是,知道這些你可以更好地利用UNIX。
一個(gè)UNIX系統(tǒng)有三種具有代表性的Shell可用:Bourne
shell,Korn shell,C shells。它們會(huì)在11,12,13章討論。在這一章中,你會(huì)學(xué)到:

什么是Shell
Shell可以為你做什么
Shell和整個(gè)系統(tǒng)的關(guān)系



內(nèi)核與Shell


堅(jiān)果的殼保護(hù)其內(nèi)部的核,同樣一個(gè)UNIX
shell提供一個(gè)外設(shè)的保護(hù)層。當(dāng)你啟動(dòng)一臺(tái)基于UNIX的計(jì)算機(jī)時(shí),UNIX的程序被調(diào)入計(jì)算機(jī)的內(nèi)存里,直到你關(guān)機(jī)。這個(gè)程序叫做內(nèi)
核(kernel),它執(zhí)行許多底級(jí)和系統(tǒng)級(jí)的工作。內(nèi)核有責(zé)任解釋基本指令并將其送到處理器。內(nèi)核也負(fù)責(zé)運(yùn)行和調(diào)度進(jìn)程,以及執(zhí)行所
有的輸入輸出。內(nèi)核是UNIX系統(tǒng)的心臟,內(nèi)核有且只有一個(gè)。

你也許對(duì)內(nèi)核職責(zé)的關(guān)鍵性有點(diǎn)迷惑,而內(nèi)核指令同樣的復(fù)雜和高技術(shù)性。為了對(duì)用戶屏蔽內(nèi)核的復(fù)雜性,也為了保護(hù)內(nèi)核以免用戶誤操
作造成損害,在內(nèi)核的周圍建了一個(gè)外殼(shell)。用戶向shell提出請(qǐng)求,shell解釋并將請(qǐng)求傳給內(nèi)核。這一節(jié)剩下的部分解釋這個(gè)外層
是如何建立的。

一旦內(nèi)核調(diào)入內(nèi)存,他就準(zhǔn)備執(zhí)行用戶的請(qǐng)求。然而,用戶首先得連接登錄,然后發(fā)出請(qǐng)求。不管怎樣,用戶登錄,內(nèi)核必須知道用戶是
誰(shuí)以及如何與他通話。為了做到這點(diǎn),內(nèi)核調(diào)用兩個(gè)特殊的程序,getty和login.對(duì)應(yīng)每個(gè)用戶的登錄點(diǎn)--通常稱為一個(gè)tty--內(nèi)核調(diào)用
getty程序。這個(gè)過(guò)程被稱為spawning(spawn原意是產(chǎn)卵)。getty顯示一個(gè)登錄提示,接著不斷地監(jiān)視通話點(diǎn)等待用戶名的輸入。當(dāng)
getty取得任何輸入時(shí),它便調(diào)用login程序。login建立用戶的身份并驗(yàn)證他登錄的權(quán)利。login程序檢查password(密碼)文件。如果用
戶輸入的密碼不正確,控制將從登錄點(diǎn)返回到getty。如果正確,login調(diào)用password文件里用戶條目中所記錄的程序并將控制交給它。這
個(gè)程序也許是一個(gè)字處理軟件或者是電子表格程序,不過(guò)一般是被稱為shell的程序。

假設(shè)有四個(gè)用戶已經(jīng)登錄進(jìn)系統(tǒng)。這四個(gè)用戶中,有兩個(gè)正使用Bourne shell,一個(gè)使用Korn
shell,還有一個(gè)使用電子表格程序。每一個(gè)用戶都得到一份shell的拷貝以服務(wù)它的請(qǐng)求,但是內(nèi)核只有一個(gè)。使用shell不會(huì)阻礙用戶使用
電子表格或別的程序,但那些程序是運(yùn)行在活動(dòng)的shell下的。shell是一個(gè)單一用戶專用的程序,它在用戶和UNIX內(nèi)核之間提供了一個(gè)界
面。

你不必一定要使用shell來(lái)存取UNIX。上面的例子中,有個(gè)用戶使用電子表格取代了shell。當(dāng)這個(gè)用戶登錄進(jìn)來(lái)時(shí),電子表格程序啟動(dòng)。
當(dāng)它退出電子表格程序時(shí),他也就退出了系統(tǒng)。當(dāng)強(qiáng)調(diào)安全性或者希望將用戶與任何UNIX的界面屏蔽開時(shí),這個(gè)技術(shù)挺有用。缺點(diǎn)是用
戶不能使用mail或其他UNIX的功能。

因?yàn)閘ogin后可以執(zhí)行任何程序--shell只是簡(jiǎn)單的一個(gè)程序--你就有可能編寫自己的shell。事實(shí)上,三個(gè)獨(dú)立開發(fā)的shell已經(jīng)成為UNIX
標(biāo)準(zhǔn)的一部分。它們是:


Bourne shell,由Stephen Bourne開發(fā)
Korn shell,由David Korn開發(fā)
C shell,由Bill Joy開發(fā)

shell的多樣性使你可以選擇最適合你或者你感到最親近的界面。



shell的功能



不過(guò)你選擇哪個(gè)標(biāo)準(zhǔn)的shell并沒有多大關(guān)系,因?yàn)槿齻(gè)shell都有相同的目的:在UNIX下為用戶提供一個(gè)界面。為了達(dá)到這個(gè)目標(biāo),三個(gè)
shell都提供了相同的基本功能:


命令行解釋功能
啟動(dòng)程序
輸入輸出重定向
管道連接
文件名置換
變量維護(hù)
環(huán)境控制
shell編程


命令行解釋



當(dāng)你登錄進(jìn)來(lái),啟動(dòng)一個(gè)交互式的shell時(shí),你會(huì)看到一個(gè)shell提示,通常是$,%或者#符號(hào)的形式。當(dāng)你在提示符下敲進(jìn)一行字符后,
shell就試圖解釋它。shell提示符下的輸入有時(shí)被稱為一個(gè)命令行。命令行的基本格式是
command arguments
命令名 參數(shù)(一個(gè)或多個(gè)))

command(命令)是可執(zhí)行的UNIX命令,程序,實(shí)用工具,或shell程序。arguments(參數(shù))被傳遞給執(zhí)行程序。大多數(shù)的UNIX實(shí)
用程序要求參數(shù)有以下的格式:
option filenames
選項(xiàng) 文件名(一個(gè)或多個(gè)))

舉個(gè)例子,在命令行下有

$ ls -l
file1 file2

在這個(gè)命令行中有三個(gè)參數(shù)傳遞給ls,第一個(gè)是個(gè)選項(xiàng),剩下的兩個(gè)是文件名。shell為內(nèi)核所做的事情之一是減少不需要的信息。對(duì)于計(jì)
算機(jī),空白(whit-espace)是一類無(wú)用信息;因此,有必要知道shell在遇到空白時(shí)做了些什么。空白由空格,水平制表符和換行符組成。
考慮這個(gè)例子:

$ echo part A part B part C

part A part B part C

這兒將命令行解釋為有六個(gè)參數(shù)的echo命令并刪除了參數(shù)之間的空白。假設(shè)如果你正在打印報(bào)告頭想保留空白,你就得用引號(hào)將數(shù)據(jù)括起
來(lái)就象下面所示:

$echo part A part B part C

part A part B part C

單引號(hào)阻止shell檢查引號(hào)里面,F(xiàn)在shell將這一行解釋為帶一個(gè)參數(shù)的echo命令,而這個(gè)參數(shù)正好是包含空白的字符串。

 

啟動(dòng)程序


當(dāng)shell解釋完命令行后,它就啟動(dòng)命令行中要求的程序。實(shí)際是內(nèi)核執(zhí)行這個(gè)程序。為了啟動(dòng)程序執(zhí)行,shell在PATH環(huán)境變量指定的目
錄中搜索可執(zhí)行文件。當(dāng)它找到這個(gè)文件,就啟動(dòng)一個(gè)子shell來(lái)運(yùn)行程序。你應(yīng)該知道子shell不必影響它父親的環(huán)境設(shè)置而建立和操縱自
己的環(huán)境。比如一個(gè)子shell可以改變它的工作目錄,當(dāng)它運(yùn)行完后,其父shell的工作目錄仍保持不變。

 

輸入輸出重定向



shell在執(zhí)行程序前進(jìn)行重定向。考慮下面兩個(gè)例子,其中使用wc單詞統(tǒng)計(jì)工具統(tǒng)計(jì)有五行的數(shù)據(jù)文件:

$wc -l fivelines

5 fivelines

$wc -l 5

這里有一點(diǎn)微小的差異。在第一個(gè)例子中,wc知道它應(yīng)該出去尋找名為fivelines的文件并對(duì)其進(jìn)行操作。因?yàn)閣c知道文件名,所以它將其
顯示給用戶。在第二個(gè)例子中,wc僅看到數(shù)據(jù)而不知道這些數(shù)據(jù)從那里來(lái),因?yàn)閟hell做了定位和重定向數(shù)據(jù)到wc的工作,也因此wc無(wú)法
顯示文件名。

 

管道連接

  管道是輸入輸出重定向的特例,它將一個(gè)命令的輸出直接連到另一個(gè)命令的輸入,因此管道也是在調(diào)用程序前建立的?紤]下面的命
令行:

$who|wc -l

5

shell沒將who的輸出顯示到屏幕上,而是定向到wc的輸入。

 

文件名置換

 


shell有責(zé)任進(jìn)行文件名的替換。shell在執(zhí)行程序前做替換。舉個(gè)例子:

$echo
*

file1 file2 file3 file3x file4

這兒,星號(hào)被擴(kuò)展為五個(gè)文件名,并被傳遞給echo作為五個(gè)參數(shù)。如果你想顯示一個(gè)星號(hào),你應(yīng)該用引號(hào)將它括起來(lái)。

   

變量維護(hù)

  

shell有能力進(jìn)行變量維護(hù)。變量是存儲(chǔ)數(shù)據(jù)為將來(lái)所用的場(chǎng)所。用等號(hào)(=)可以給變量賦值。

$LOOKUP=/usr/mydir

在這里,shell建立一個(gè)LOOKUP變量,并將/usr/mydir賦給它。稍后,你可以在命令行上通過(guò)在變量名之前加$符號(hào)來(lái)使用變量值?紤]
這些例子:

$echo $LOOKUP

/usr/mydir

$echo LOOKUP

LOOKUP



C-shell的用戶應(yīng)該注意:C-shell中的賦值不同于Bourne和Korn
shell。C-shell使用set命令進(jìn)行賦值。

$set LOOKUP =
/usr/mydir

注意在等號(hào)兩邊要加空格。



就象文件名的置換一樣,變量名的置換也是在調(diào)用程序前進(jìn)行。第二個(gè)例子省略了$符號(hào)。因此,shell只是簡(jiǎn)單地將字符串傳遞給echo作
參數(shù)。在變量替換中,變量的值取代了變量名。例如在:

$ls $LOOKUP/filename

用/usr/mydir/filename做參數(shù)調(diào)用ls。  

環(huán)境控制


當(dāng)login程序調(diào)用你的shell時(shí),shell對(duì)你的環(huán)境進(jìn)行設(shè)置,其中包括你的home(家)目錄,你使用的終端類型以及用來(lái)搜索可執(zhí)行文件的
路徑。環(huán)境被存儲(chǔ)在環(huán)境變量中。舉個(gè)例子,要改變終端類型,你需要改變TERM變量中的值,就象下面所示的:

$echo $TERM

vt 100

$TERM=ansi

$echo $TERM

ansi



注意在C-shell中,給環(huán)境變量賦值使用setenv命令。

%setenv TERM
vt100



shell編程

 


你已經(jīng)看到shell可以用來(lái)解釋命令行,維護(hù)變量,執(zhí)行程序。另外shell還是一種編程語(yǔ)言。通過(guò)使用流程控制和條件判斷來(lái)組合命令與變
量賦值,你就擁有了一個(gè)有力的編程工具。使用shell作為一門編程語(yǔ)言,你可以使重復(fù)的任務(wù)自動(dòng)化,寫報(bào)告,甚至你可以建立和操縱自
己的數(shù)據(jù)文件。



來(lái)源:
http://www.linuxeden.com/edu/doctext.php?docid=1337

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

shell 十三問?

單引號(hào)‘’
取消除單引號(hào)以外的任何字符的特殊含義。如:echo  ‘my name is  $name’其結(jié)果為:my name is $name ,此時(shí)$只作為一個(gè)普通字符使用了。

雙引號(hào)“”
取消除雙引號(hào)、$號(hào)以及_號(hào)以外的所有字符的特殊含義

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

shell 十三問?

輸入轉(zhuǎn)向符〈
用于指定輸入的設(shè)備或文件。如:mail root〈message則將文件message 的內(nèi)容發(fā)送給root。

輸出轉(zhuǎn)向符 〉
用于將輸出發(fā)送到指定的設(shè)備或文件。如:lf 〉myfile 其結(jié)果是將lf的執(zhí)行結(jié)果放到文件myfile中(同時(shí)清空文件中原有的數(shù)據(jù)),而不顯示到屏幕上。

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

shell 十三問?

&& 和 ||
其作用是使管道線有條件地執(zhí)行。其使用方法為:
command1 && command2:當(dāng)且僅當(dāng)command1執(zhí)行成功后才執(zhí)行command2
command1 || command2:當(dāng)且僅當(dāng)command1執(zhí)行失敗后才執(zhí)行command2
您需要登錄后才可以回帖 登錄 | 注冊(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)專區(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