shell 中的兩個特殊文件 “/dev/null” 和 “/dev/tty”
/dev/null
當(dāng)被用作重定向輸出時,程序的輸出被直接丟棄。該文件用在哪些不關(guān)心程序輸出的地方。
當(dāng)被用作重定向輸入時,輸入則是文件結(jié)束。
/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 里的空項(xiàng)目表示當(dāng)前項(xiàng)目??枕?xià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)前項(xià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)說明過基本的命令,選項(xiàng),參數(shù)與變量,以及 echo
與 printf
的基本輸出,也稍微說了一下基本的 I/O 重定向符:<,>,>> 以及 |。shell 會在 $PATH 變量所列舉的各個目錄中尋找命令。$PATH
常會包含個人的 bin 目錄 (永愛存儲用戶個人的程序與腳本),可以在 /etc/profile
文件中將目錄列入到 PATH
里。