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

shell 學(xué)習(xí)第六天---小結(jié)

shell 中的兩個特殊文件“/dev/null”和“/dev/tty”

  1. /dev/null
    當(dāng)被用作重定向輸出時,程序的輸出被直接丟棄。該文件用在哪些不關(guān)心程序輸出的地方。
    當(dāng)被用作重定向輸入時,輸入則是文件結(jié)束。

  2. /dev/tty
    當(dāng)被用作重定向時,表示重定向到終端。

基本命令查找

shell 會沿著$PATH 來尋找命令。$PATH 是一個以冒號分割的目錄列表,你可以在列表所指定的目錄下找到所要執(zhí)行的命令。命令可能是 shell 腳本,也可能是編譯后的可執(zhí)行文件,從用戶角度來看,二者并無不同。
默認(rèn)路徑至少包含/bin 和/usr/bin,或許還包含其他的。
名稱為 bin 的目錄用來保存可執(zhí)行文件。

如果要編寫自己的腳本,最好準(zhǔn)備一個自己的 bin 目錄來存放他們,并且讓 shell 能夠自動找到他們。

$cd  
$mkdir bin   
$mv nusers bin  
$PATH+$PATH:$HOME/bin         //將個人的 bin 目錄附加到 PATH(暫時生效,系統(tǒng)重啟后失效)  
nusers

要想永久生效,在/etc/profile 文件中把你的 bin 目錄加入到$PATH,而每次登陸時 Shell 都將讀取.profile 文件。
PATH=$PATH:$HOME/bin
$PATH 里的空項目表示當(dāng)前項目。空項目位于路徑中間時,可以用兩個連續(xù)的冒號來表示,如果將冒號直接置于最前端或尾端,分別表示查找的時候最先查找或最后查找當(dāng)前目錄。

$PATH=:/bin:/usr/bin            先找當(dāng)前目錄  
$PATH=/bin::/usr/bin            當(dāng)前目錄居中  
$PATH=/bin:/usr/bin:            最后找當(dāng)前目錄  

不應(yīng)該在查找路徑中放進(jìn)當(dāng)前項目。

訪問 shell 腳本的參數(shù)
定義參數(shù)關(guān)鍵字$:例如 echo frist argumentsis $1,大于等于 10 的 參數(shù)需要用{}包起來,echo tenth argumentsis ${10}

例如我們想查找名字為 syx 用戶是否登陸

who | grep syx  
syx      pts/1        2015-06-09 11:00 (192.168.199.114)

知道了如何尋找特定的用戶后,我們可以經(jīng)命令放在腳本里,這段腳本的第一個參數(shù)就是我們要找的用戶名稱

vi findname              建立新文件  
 #!/bin/sh       #查看指定用戶是否登錄  
who | grep $1  
./findname syx  
syx      pts/1        2015-06-09 11:00 (192.168.199.114)

但是這是在理想情況下,如果用戶不按套路出牌,即不指定參數(shù),則會報錯。

小結(jié)

編譯性語言和腳本語言本身并無優(yōu)劣之分,只有適合不適合
當(dāng)對性能要求不高,希望盡快開發(fā)出程序并以較高的方式工作是,腳本語言完全可以勝任。
所有的 shell 腳本都應(yīng)該以#!為第一行,這一機(jī)制可讓你的腳本更有靈活性,你可以選擇使用 shell 或其他的語言來編寫腳本。

shell 是一個完整的程序設(shè)計語言,我們已經(jīng)說明過基本的命令,選項,參數(shù)與變量,以及 echo 與 printf 的基本輸出,也稍微說了一下基本的 I/O 重定向符:<,>,>>以及|.
shell 會在$PATH 變量所列舉的各個目錄中尋找命令。$PATH 常會包含個人的 bin 目錄(永愛存儲用戶個人的程序與腳本),可以在/etc/profile 文件中將目錄列入到 PATH 里。