shell 中的兩個特殊文件“/dev/null”和“/dev/tty”
/dev/null
當(dāng)被用作重定向輸出時,程序的輸出被直接丟棄。該文件用在哪些不關(guān)心程序輸出的地方。
當(dāng)被用作重定向輸入時,輸入則是文件結(jié)束。
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ù),則會報錯。
編譯性語言和腳本語言本身并無優(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 里。