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