shelll热身
文章目錄
- 熱身
- 為什么使用`shell`
- 帶著一個`Sha-Bang`出發(fā)(`Sha-Bang`是指`#!`)
熱身
為什么使用shell
作為一個從事嵌入式行業(yè)的開發(fā)人員,每天要打交道的就是和Linux的shell串口,更準(zhǔn)卻的來說是bash shell,很多人剛從windows的界面操作轉(zhuǎn)到Linux上來時,對看到Linux這個彈出來的控制窗口,多少有點不知所措,甚至有點茫然。
書讀了一本又一本,博客寫了一篇又一篇,可能是因為從事行業(yè)的性質(zhì)決定的,也可能是因為自己總是愛學(xué)習(xí)點新鮮的工具導(dǎo)致。雖學(xué)了各種語言各種庫,但是回過頭來看這些學(xué)過的知識,僅存在自己的腦海中,平時工作生活中能用到的可能百分之20都不到,這也許就是進(jìn)店的二八理論吧-你學(xué)的知識只有百分之二十是能夠用到的,反過來當(dāng)你學(xué)會使用一個工具的百分之二十的功能時,你就能夠熟練的使用它,讓我們帶著這種二八理論來一起學(xué)會使用bash shell的百分之二十的使用方式吧。
shell是什么,你可以說shell是一個程序、一個命令解析器、一個介于用戶和操作系統(tǒng)之間的絕緣層,一種計算機(jī)語言、一種腳本語言… ,這些答案都是對的,至于那些權(quán)威的官方解析,大家可以自行進(jìn)行百度,會這查看wiki解釋,在linux中shell能夠?qū)⑾到y(tǒng)調(diào)用、公共程序、工具、編譯的二進(jìn)制文件粘合在一起來建立應(yīng)用,如果你是在linux上從事開發(fā)工作,建議你學(xué)好shell,熟練掌握shell之后,你根本不需要那些華而不實成熟緊湊的程序。
帶著一個Sha-Bang出發(fā)(Sha-Bang是指#!)
shell腳本就是一堆系統(tǒng)命令列在一個文件中,因此它可以幫助你少敲一些命令。
寫一個腳本
ls pwd ifconfig腳本寫好之后,將其保存為example.sh1,執(zhí)行可以直接調(diào)用bash來執(zhí)行這個腳本,或者加上可執(zhí)行權(quán)限之后在直接執(zhí)行對應(yīng)的文件,
當(dāng)然你可以更加細(xì)化的添加權(quán)限的管理
比如:
chmod 555 scriptname (允許任何人都具有可讀和執(zhí)行權(quán)限) chmod +rx scriptname (允許任何人都具有可讀和執(zhí)行權(quán)限)或者
chmod u+rx scriptname1??
實現(xiàn)一個清除文件內(nèi)筒的腳本:
echo "cat example" cat /dev/null > messages echo "file is cleanup" exit該腳本實現(xiàn)了,將當(dāng)前文件夾下的messages文件中的內(nèi)筒清空,
echo是打印命令
/dev/null/ 在類UNIX系統(tǒng)中,/dev/null,或稱空設(shè)備,是一個特殊的設(shè)備文件,它丟棄一切寫入其中的數(shù)據(jù)(但報告寫入操作成功),讀取它則會立即得到一個EOF。
在程序員行話,尤其是UNIX行話中,/dev/null被稱為位桶(bit bucket)或者黑洞(black hole)。空設(shè)備通常被用于丟棄不需要的輸出流,或作為用于輸入流的空文件。當(dāng)你讀它的時候,它會提供無限的空字符(NULL, ASCII NUL, 0x00)。
改進(jìn)一下
執(zhí)行腳本:
bash cat_example2.sh filename #! /bin/bash echo "cat cleanup example2"# 確保輸入文件名,否則退出 if test $# != 1 ; thenecho "請輸入要清除文件內(nèi)容的文件名"# 腳本退出返回的值,可通過 echo $? 查看exit 1 fiFILE_NAME=$1 cat /dev/null > ${FILE_NAME}echo "file is cleanup" exit #這是一個退出命令對你沒有看錯,你在shell中能向其他語言腳本一樣使用判斷條件,改進(jìn)之后的腳本用戶可以指定要清除內(nèi)容的文件名,并且當(dāng)檢測不到文件名輸入的時候腳本會報錯退出并返回1
$# 是傳給腳本的參數(shù)個數(shù) $0 是腳本本身的名字 $1 是傳遞給該shell腳本的第一個參數(shù) $2 是傳遞給該shell腳本的第二個參數(shù) $@ 是傳給腳本的所有參數(shù)的列表 $* 是以一個單字符串顯示所有向腳本傳遞的參數(shù),與位置變量不同,參數(shù)可超過9個 $$ 是腳本運(yùn)行的當(dāng)前進(jìn)程ID號 $? 是顯示最后命令的退出狀態(tài),0表示沒有錯誤,其他表示有錯誤要注意,在每個腳本的開頭都使用 sha-bang(#!), 這意味著告訴你的系統(tǒng)這個文件的執(zhí)行需要指定一個解釋器. #! 實際上是一個2字節(jié)的魔法數(shù)字, 這是指定一個文件類型的特殊標(biāo)記, 換句話說,在這種情況下, 指的就是一個可執(zhí)行的腳本(鍵入 man magic 來獲得關(guān)于這個迷人話題的更多詳細(xì)信息)。
在sha-bang之后接著是一個路徑名. 這個路徑名就是解釋腳本中命令的解釋程序所在的路徑, 可能是一個shell, 也可能是一個程序語言, 也可能是一個工具包中的命令程序. 這個解釋程序從頭開始解釋并且執(zhí)行腳本中的命令(從 sha-bang行下邊的一行開始)。
當(dāng)然#!也可以被忽略, 不過這樣你的腳本文件就只能是一些命令的集合, 不能夠使用shell內(nèi)建的指令了。再次提醒你 #!/bin/sh將會調(diào)用默認(rèn)的shell解釋器, 在Linux機(jī)器上默認(rèn)是 /bin/bash .
1 #!/bin/sh 2 #!/bin/bash 3 #!/usr/bin/perl 4 #!/usr/bin/tcl 5 #!/bin/sed -f 6 #!/usr/awk -f總結(jié)
- 上一篇: 作者:杨燕(1964-),女,西南交通大
- 下一篇: 作者:周涛(1979-),男,博士,启明