網上可以賭錢的游戲   免費注冊 查看新帖 |

網上可以賭錢的游戲

  平臺 網上游戲 博客 文庫
最近訪問板塊 發新帖
查看: 1562962 | 回復: 799
打印 上一主題 下一主題

[學習共享] shell 十三問? [復制鏈接]

本文地址:http://www.hznkw.tw/thread-218853-1-1.html
文章摘要:shell 十三問? ,神色自若泛萍浮梗焚香禮拜,三分鼎足不足為據我問你答。

榮譽版主

網上游戲徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
跳轉到指定樓層
1 [收藏(0)] [報告]
發表于 2003-12-09 02:48 |只看該作者 |倒序瀏覽
我在 CU 的日子並不長,有幸在 shell 版上與大家結緣。
除了跟眾前輩學習到不少技巧之外,也常看到不少朋友的問題。
然而,在眾多問題中,我發現許多瓶頸都源於 shell 的基礎而已。
每次要解說,卻總有千言萬語不知從何起之感...

這次,我不是來回答,而是準備了關於 shell 基礎的十三個問題要問大家﹗
希望 shell 學習者們能夠透過尋找答案的過程,好好的將 shell 基礎打紮實一點...
當然了,這些問題我也會逐一解說一遍。只是,我不敢保證甚麼時候能夠完成這趟任務。
除了時間關係外,個人功力實在有限,很怕匆忙間誤導觀眾就糟糕了。
若能拋磚引玉,誘得其他前輩出馬補充,那才真的是功德一件﹗

shell 十三問:

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

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


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

---------
建議參考討論:
1) shaoping0330 兄關於變量替換的補充:
(連結在改版後已經失效)

2) shaoping0330 兄關於 RE 的說明:
http://www.hznkw.tw/forum/viewtopic.php?t=393964

3) 關於 nested subshell 的討論:
(連結在改版後已經失效)

4) 關於 IFS 的討論:
http://www.hznkw.tw/forum/viewtopic.php?t=512925

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

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

評分

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

查看全部評分

網上游戲徽章:
0
2 [報告]
發表于 2003-12-09 02:54 |只看該作者

shell 十三問?

感謝版主~~ 我也在學習Shell編程,開始打個好基礎。

網上游戲徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
3 [報告]
發表于 2003-12-09 07:24 |只看該作者

shell 十三問?

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

網上游戲徽章:
0
4 [報告]
發表于 2003-12-09 09:01 |只看該作者

shell 十三問?

好問題!值得仔細琢磨琢磨...

網上游戲徽章:
0
5 [報告]
發表于 2003-12-09 09:53 |只看該作者

shell 十三問?

暈了~~這些題我一個也說不清楚
    

網上游戲徽章:
0
6 [報告]
發表于 2003-12-09 10:17 |只看該作者

shell 十三問?

只想知道答案。

網上游戲徽章:
0
7 [報告]
發表于 2003-12-09 10:31 |只看該作者

shell 十三問?

關于第一個問題,什么是shell

作者:Rick Rummel


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

什么是Shell
Shell可以為你做什么
Shell和整個系統的關系



內核與Shell


堅果的殼保護其內部的核,同樣一個UNIX
shell提供一個外設的保護層。當你啟動一臺基于UNIX的計算機時,UNIX的程序被調入計算機的內存里,直到你關機。這個程序叫做內
核(kernel),它執行許多底級和系統級的工作。內核有責任解釋基本指令并將其送到處理器。內核也負責運行和調度進程,以及執行所
有的輸入輸出。內核是UNIX系統的心臟,內核有且只有一個。

你也許對內核職責的關鍵性有點迷惑,而內核指令同樣的復雜和高技術性。為了對用戶屏蔽內核的復雜性,也為了保護內核以免用戶誤操
作造成損害,在內核的周圍建了一個外殼(shell)。用戶向shell提出請求,shell解釋并將請求傳給內核。這一節剩下的部分解釋這個外層
是如何建立的。

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

假設有四個用戶已經登錄進系統。這四個用戶中,有兩個正使用Bourne shell,一個使用Korn
shell,還有一個使用電子表格程序。每一個用戶都得到一份shell的拷貝以服務它的請求,但是內核只有一個。使用shell不會阻礙用戶使用
電子表格或別的程序,但那些程序是運行在活動的shell下的。shell是一個單一用戶專用的程序,它在用戶和UNIX內核之間提供了一個界
面。

你不必一定要使用shell來存取UNIX。上面的例子中,有個用戶使用電子表格取代了shell。當這個用戶登錄進來時,電子表格程序啟動。
當它退出電子表格程序時,他也就退出了系統。當強調安全性或者希望將用戶與任何UNIX的界面屏蔽開時,這個技術挺有用。缺點是用
戶不能使用mail或其他UNIX的功能。

因為login后可以執行任何程序--shell只是簡單的一個程序--你就有可能編寫自己的shell。事實上,三個獨立開發的shell已經成為UNIX
標準的一部分。它們是:


Bourne shell,由Stephen Bourne開發
Korn shell,由David Korn開發
C shell,由Bill Joy開發

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



shell的功能



不過你選擇哪個標準的shell并沒有多大關系,因為三個shell都有相同的目的:在UNIX下為用戶提供一個界面。為了達到這個目標,三個
shell都提供了相同的基本功能:


命令行解釋功能
啟動程序
輸入輸出重定向
管道連接
文件名置換
變量維護
環境控制
shell編程


命令行解釋



當你登錄進來,啟動一個交互式的shell時,你會看到一個shell提示,通常是$,%或者#符號的形式。當你在提示符下敲進一行字符后,
shell就試圖解釋它。shell提示符下的輸入有時被稱為一個命令行。命令行的基本格式是
command arguments
命令名 參數(一個或多個))

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

舉個例子,在命令行下有

$ ls -l
file1 file2

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

$ echo part A part B part C

part A part B part C

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

$echo part A part B part C

part A part B part C

單引號阻止shell檢查引號里面。現在shell將這一行解釋為帶一個參數的echo命令,而這個參數正好是包含空白的字符串。

 

啟動程序


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

 

輸入輸出重定向



shell在執行程序前進行重定向。考慮下面兩個例子,其中使用wc單詞統計工具統計有五行的數據文件:

$wc -l fivelines

5 fivelines

$wc -l 5

這里有一點微小的差異。在第一個例子中,wc知道它應該出去尋找名為fivelines的文件并對其進行操作。因為wc知道文件名,所以它將其
顯示給用戶。在第二個例子中,wc僅看到數據而不知道這些數據從那里來,因為shell做了定位和重定向數據到wc的工作,也因此wc無法
顯示文件名。

 

管道連接

  管道是輸入輸出重定向的特例,它將一個命令的輸出直接連到另一個命令的輸入,因此管道也是在調用程序前建立的。考慮下面的命
令行:

$who|wc -l

5

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

 

文件名置換

 


shell有責任進行文件名的替換。shell在執行程序前做替換。舉個例子:

$echo
*

file1 file2 file3 file3x file4

這兒,星號被擴展為五個文件名,并被傳遞給echo作為五個參數。如果你想顯示一個星號,你應該用引號將它括起來。

   

變量維護

  

shell有能力進行變量維護。變量是存儲數據為將來所用的場所。用等號(=)可以給變量賦值。

$LOOKUP=/usr/mydir

在這里,shell建立一個LOOKUP變量,并將/usr/mydir賦給它。稍后,你可以在命令行上通過在變量名之前加$符號來使用變量值。考慮
這些例子:

$echo $LOOKUP

/usr/mydir

$echo LOOKUP

LOOKUP



C-shell的用戶應該注意:C-shell中的賦值不同于Bourne和Korn
shell。C-shell使用set命令進行賦值。

$set LOOKUP =
/usr/mydir

注意在等號兩邊要加空格。



就象文件名的置換一樣,變量名的置換也是在調用程序前進行。第二個例子省略了$符號。因此,shell只是簡單地將字符串傳遞給echo作
參數。在變量替換中,變量的值取代了變量名。例如在:

$ls $LOOKUP/filename

用/usr/mydir/filename做參數調用ls。  

環境控制


當login程序調用你的shell時,shell對你的環境進行設置,其中包括你的home(家)目錄,你使用的終端類型以及用來搜索可執行文件的
路徑。環境被存儲在環境變量中。舉個例子,要改變終端類型,你需要改變TERM變量中的值,就象下面所示的:

$echo $TERM

vt 100

$TERM=ansi

$echo $TERM

ansi



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

%setenv TERM
vt100



shell編程

 


你已經看到shell可以用來解釋命令行,維護變量,執行程序。另外shell還是一種編程語言。通過使用流程控制和條件判斷來組合命令與變
量賦值,你就擁有了一個有力的編程工具。使用shell作為一門編程語言,你可以使重復的任務自動化,寫報告,甚至你可以建立和操縱自
己的數據文件。



來源:
http://www.hznkw.tw/sglhj/edu/doctext.php?docid=1337

網上游戲徽章:
0
8 [報告]
發表于 2003-12-09 11:50 |只看該作者

shell 十三問?

單引號‘’
取消除單引號以外的任何字符的特殊含義。如:echo  ‘my name is  $name’其結果為:my name is $name ,此時$只作為一個普通字符使用了。

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

網上游戲徽章:
0
9 [報告]
發表于 2003-12-09 11:51 |只看該作者

shell 十三問?

輸入轉向符〈
用于指定輸入的設備或文件。如:mail root〈message則將文件message 的內容發送給root。

輸出轉向符 〉
用于將輸出發送到指定的設備或文件。如:lf 〉myfile 其結果是將lf的執行結果放到文件myfile中(同時清空文件中原有的數據),而不顯示到屏幕上。

網上游戲徽章:
0
10 [報告]
發表于 2003-12-09 11:56 |只看該作者

shell 十三問?

&& 和 ||
其作用是使管道線有條件地執行。其使用方法為:
command1 && command2:當且僅當command1執行成功后才執行command2
command1 || command2:當且僅當command1執行失敗后才執行command2
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則 發表回復

業務部
基于案例的 SQL 優化實戰訓練營

講師:中電福富特級專家梁敬彬,參與本次課程培訓,你將收獲:
1. 能編寫出較為高效的 SQL;
2. 能解決70%以上的數據庫常見優化問題;
3. 能得到老師提供的高效的相關工具和解決方案;
4. 能舉一反三,收獲不僅僅是 SQL 優化。
現在購票享受8.8折優惠!
----------------------------------------
優惠時間:2019年3月20日前

大會官網>>
<鏈輪> 安卓版四人麻将 新时时加奖 时时缩水app苹果 青海快三购买 大星排列5走势图 云南文山快乐十分开奖结果 pk10三码计划分析 公告快乐时时10分钟赚10万 九龙心水8112Cc资料 快乐时时计划软件手机版 浙江快乐12选五一定牛
  

北京盛拓優訊信息技術有限公司. 版權所有 16024965號-6 北京市公安局海淀分局網監中心備案編號:11010802020122
中國互聯網協會會員  聯系我們[email protected]
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP
   <鏈輪>新时时加奖 时时缩水app苹果 青海快三购买 大星排列5走势图 云南文山快乐十分开奖结果 pk10三码计划分析 公告快乐时时10分钟赚10万 九龙心水8112Cc资料 快乐时时计划软件手机版 浙江快乐12选五一定牛