鍍金池/ 教程/ Linux/ shell 學習第一天
shell 學習四十一天----列出文件 ls 和 od 命令
shell 學習小結(jié)
shell 學習第二十八天----case 語句
shell 學習四十四天----尋找文件
shell 學習三十五天----波浪號展開與通配符
shell 學習三十八天----執(zhí)行順序和 eval
shell 學習四十八天----文件校驗和匹配
shell 學習四十天----awk 的驚人表現(xiàn)
shell 學習第十一天----sed 正則的精確控制
shell 學習第十七天----awk 命令
shell 學習三十九天----內(nèi)建命令
shell 學習四十五天----xargs
shell 學習三十七天----引用
shell 學習第十六天----join 練習
shell 學習第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學習第九天----分組
shell 學習第五天----基本的 I/O 重定向
shell 學習第十五天----使用 cut 選定字段
shell 學習四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學習第八天----擴展正則表達式 (ERE)
shell 學習第十九天----文本塊排序
shell 學習第二十一天----重新格式化段落
shell 學習三十六天----命令替換
shell 學習第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學習四十二天----使用 touch 更新文件時間
shell 學習五十一天----top 命令查看進程列表
shell 學習第一天
shell 學習五十四天----進程系統(tǒng)調(diào)用的追蹤 strace
shell 學習五十天----查看進程 ps 命令
shell 學習第二十七天----退出狀態(tài)和 if 語句
shell 學習第二十三天----打印
shell 學習三十三天----關(guān)于重定向
shell 學習四十九天----進程建立
shell 學習第三十天----break,continue,shift,getopts
shell 學習五十五天----進程記賬
shell 學習總結(jié)一
shell 學習第二十六天----變量與算數(shù)
shell 學習第二十二天----計算行數(shù), 字數(shù)以及字符數(shù)
shell 學習五十八天----/proc 文件系統(tǒng)
shell 學習第二十五天----神器的管道符
shell 學習第三十二天----read 讀取一行
sheel 學習第三天
shell 學習----小結(jié)
shell 學習第十八天----文本排序
shell 學習第三十一天----函數(shù)問題
shell 學習第十天----sed 查找與替換
shell 學習四十三天----臨時性文件的建立與使用
shell 學習四十七天----文件比較 cmp,diff,patch
shell 學習三十四天----printf 詳解
shell 學習五十七天 ----linux 任務管理,針對上一講的總結(jié)和擴展
shell 學習第六天----小結(jié)
shell 學習第十三天----sed 案例分析
shell 學習第七天----基礎(chǔ)正則表達式 (BRE)
shell 學習第十二天----行與字符串
shell 學習小結(jié)四
shell 學習第二十九天----循環(huán)
shell 學習五十二天----刪除進程 kill 命令
shell 學習五十六天----延遲進程調(diào)度
shell 學習第四天----華麗的 printf 輸出
shell 學習第十五天----join 連接字段
shell 學習完結(jié)篇----希望你能看到
shell 學習第二天
shell 學習五十三天----捕獲信號 trap

shell 學習第一天

在開始學習 shell 以前我覺得應該具備的基礎(chǔ)有以下幾點:

  1. 如何登陸 linux 系統(tǒng)
  2. 如何在命令行上執(zhí)行程序
  3. 如何做一個簡單的命令管道,與使用簡單的輸入 / 出重定向,例如 < 和 >
  4. 如何以 & 將程序放在后臺執(zhí)行
  5. 使用 chmod,將腳本設(shè)置為可執(zhí)行權(quán)限

入門

當我們需要計算機幫我們做點什么的是,最好是選對工具。就像你不會用文本編輯器來做支票簿的核對, 不會用計算器來寫策劃方案一樣,所以說程序語言用于不同的需求,本身沒有好壞之分。

shell 腳本常用于系統(tǒng)管理工作,或者用于結(jié)合現(xiàn)有的程序以完成特定的工作。一旦你寫出了一個完成工作的辦法,就可以吧用到的命令串在一起, 放進一個單獨的程序或者腳本里,以后只要執(zhí)行改程序就能完成工作。如果寫的程序很有用,那么別人可以一用該程序當做一個黑盒來使用,他是一個可以完成工作的成虛,但是我們不必知道他是如何完成的 (面向?qū)ο蟮姆庋b特性)。

首先來看看腳本語言和編譯語言的差異

大型的程序一般都是由編譯語言寫成,例如:C++,Java,C 等。這些程序只要從源代碼 (socure code) 轉(zhuǎn)換為目標代碼 (object code),便能直接通過計算機來執(zhí)行。

變異性語言的有點事: 效率高,因為他們多半是運作與底層,所處理的是子節(jié),整數(shù),浮點數(shù)或者其他的及其層級的對象。例如: 在 C++ 里,很難首先目錄的整體移動或者復制。

而腳本編程語言通常是解釋型的。這類程序的執(zhí)行,是由解釋器度日程序代碼,并將其轉(zhuǎn)換成內(nèi)部的形式,再執(zhí)行。注意,解釋器本身是一般的編譯型程序。

通俗一點: 編譯語言需要編譯器,腳本語言需要解釋器,例如編寫 C++ 程序需要使用 VS,而編寫 HTML 代碼有網(wǎng)頁就行,因為網(wǎng)頁中有自帶的解釋器。

為什么要使用 shell 腳本

使用腳本編程語言的好處是,腳本語言多半運行在比編譯語言還高得層級,能夠情已處理文件與目錄之類的對象。缺點: 一般情況下,效率比較低。不過權(quán)衡之下,腳本的執(zhí)行速度已經(jīng)很快,快到足以讓人感覺不到性能不高了。常用的腳本編程語言有:shelll,Ruby,javascript等。 shell 似乎是不同版本的 linux 系統(tǒng)之間的通用功能。shell 腳本只要用心寫,就能應用到很多系統(tǒng)上。

shell 腳本的過人之處

  • 簡單性: shell 是高級語言
  • 可移植性: 通過 POSIX (可移植操作系統(tǒng)接口,是 IEEE 為要在各種 UNIX 操作系統(tǒng)上運行的軟件,而定義 API 的一系列互相關(guān)聯(lián)的標準的總稱) 所定義的功能,可以在不同的系統(tǒng)上執(zhí)行,無需需改。
  • 開發(fā)容易: 短時間即可完成一個功能強大又好用的腳本 (字啊以后的學習中就能看到)

說了那么多,接下來就是一個簡單的腳本。在 shell 交互界面輸入 who,得到以下信息 (這是我的電腦):

root   pts/0        2015-06-07 18:37 (192.168.199.114)

這行信息代表系統(tǒng)上有多少人登陸。類似于 QQ 在線人數(shù)

每個字段的含義分別是登入帳號 (root),使用的終端機 (pts/0),登入時間以及從何處登入。在大型的,多用戶的系統(tǒng)上 (服務器的運維上),所列出的列表可能很長 (一個頁面不夠顯示),你需要的信息或許可能滾出畫面,這是讓用戶查詢的困難。而這正是進行自動化的好時機。使用 wc(字數(shù)計算) 程序,特可以計算出行數(shù) (line),字符數(shù) (character),字數(shù) (word)。使用 wc -l: 只列出行數(shù)。

who | wc -l 計算用戶個數(shù) -----> 我的電腦是一個 1

|(管道) 符號可以在兩個程序之間建立管道 (pipeline):who 的輸出,成了 wc 的輸入。
將此管道轉(zhuǎn)成一個獨立的命令。方法是把這條命令輸入一個一般的文件中,然后使用 chmod 為該文件設(shè)置執(zhí)行的權(quán)限。

#cat > nusers cat 是輸出文件內(nèi)容的命令,>nusers 表示把內(nèi)容送到文件 nusers 里而不是默認的屏幕。但是這里 cat 后面沒有參數(shù),意味著 cat 將從鍵盤讀取數(shù)據(jù)輸入到 nusers 中,以 CTRL+D 結(jié)束。

  • ^D Ctrl+D 表示 end-of-file
  • #chmod +x nusers 讓文件擁有執(zhí)行的權(quán)限
  • #./nusers 輸出我們需要的結(jié)果。

易尚展示了一個小型 Shell 腳本的典型開發(fā)周期,首先,直接在命令行上測試。然后,一旦找到能夠完成工作的適當語法,再將他們放進一個單獨的腳本里,并未該腳本設(shè)置執(zhí)行的權(quán)限。之后就能直接使用該腳本了。