您好,登錄后才能下訂單哦!
我們在嵌入式的開發中,難免會要用到腳本。常用的也就是 makefile 和 shell 腳本了,之前我們學習了 makefile 相關的知識,接下來我們也將要學習 shell 相關的知識,以便在以后的嵌入式開發中能更快、更高效的完成任務。學習于果子玩轉 Linux 下 SHELL 編程。
那么什么是 shell 呢?shell 是結余用戶與系統之間,幫助用戶與系統進行溝通的工具。關系如下圖
那么除了文字模式的 shell 外,GNOME、KDE 這類圖形界面也屬于 shell 的范疇。我們通常提到的 shell 都指的是狹義上的 shell,即文字模式的 shell。一般來說,shell 可以分成兩類。第一類是由 Bourneshell 衍生出來的包括 sh,ksh,bash 與 zsh;第二類是由 CShell 衍生出來的,包括 csh 與 tcsh。除此之外,還有一個 rc。
那么我們為什么要來學習 shell 呢?其主要原因可以總結為以下三點:
1、圖形用戶界面只是一個程序套件,文字模式的 shell 功能和能執行的任務則比圖形界面要強的多;
2、shell 是文字模式,因此遠程登錄和傳輸的速度比圖形界面更快;
3、shell 使用起來更方便。
Linux 下的支持的 shell 有好多種,我們學習的就是最常用的 bash shell。現在主要的 Linux 發行版都是用 bash 作為默認的管理 shell。下來我們就來說說如何編寫一個簡單的 bash shell。
1、使用任何的文本編輯工具進行編寫,如:vim
#!/bin/bash #放置在文件的開頭
2、設置腳本執行權限
chmod a+x filename
chmod 700 filename
3、執行腳本
bash your_script.sh
sh your_script.sh
./your_script.sh
test.sh 源碼
#!/bin/bash echo "hello world!"
運行結果如下
我們看到在執行的時候,它說沒有權限,然后我們執行上面的第二步。再來看看
我們已經成功地用 shell 輸出了經典的 hello world。那么上面的那句 #!/bin/bash 是什么意思呢?它的意思是用 bin 目錄下的 bash 腳本解釋器來對其進行解釋。
下來我們來看看 shell 中的變量。在 shell 中,變量分為系統環境變量和 UDV (user defined variable)變量。系統環境變量是系統本身所有,通常為大寫字母,系統變量是通過 set 或 declare 指令進行查看;而 UDV 變量則是由用戶創建和為維護的,我們建議定義其時進行大寫的定義。那么這時為什么呢?因為 Linux 系統的命令全部采用的是小寫方式,我們應避免沖突與混淆。
那么 shell 中所有變量定義都是字符串;應區分變量的大小寫,如:var 和 Var 是兩個不同的變量;變量必須以字母或下劃線開頭,不得有“,”;‘:’;“\”等特殊字符。
下來我們來進行下實驗
我們看到在 set | grep PATH 后出現了 PATH 相關的定義。在進行變量的定義時加 , 或者 \ 的時候,都出現了錯誤。下來我們來講講變量的聲明和定義,變量的定義如我們上面所操作的那樣,直接是 變量名=值(變量名與值之間的“=”號沒有空格);如果我們需要聲明帶有空格的變量,那么我們就必須像定義字符串一樣加上 “” 才行。如果我們需要聲明一個只讀變量,那么在定義的前面需要加上 readonly;修改環境變量,如PATH=$PATH:/class/bin ,修改用戶自定義變量時,如:DIR="hello"。
我們想要使用變量的話,應在變量前面加 “$”符號,在上面的示例中也展示了。echo $DIR 或 echo ${DIR}。那么上面兩種用法有何區別呢?我們為何要在 shell 中使用變量,又為何要添加界定符 {} 呢?
下來我們還是以實驗為例來進行講解:第一種寫法:
#!/bin/bash echo "/home/aston/test"
我們來看看執行后的結果
我們再來看看第二種寫法
#!/bin/bash PWD="/home/aston/test" echo $PWD
我們看到效果是一樣的,但是第二種看起來就非常的簡潔明了,所以我們在 shell 中定義變量是為了提高代碼的可讀性。下來我們來看看界定符的作用。在有的版本中,界定符是為了保證我們如果在一個環境變量后面追加東西時,它會直接寫到這個環境變量的路徑后面。在有的版本中,這個好像沒什么作用了。不過我們盡量還是加上界定符,以保證最大的正確率。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。