shell簡介基礎(一)

        我們在嵌入式的開發中,難免會要用到腳本。常用的也就是 makefile 和 shell 腳本了,之前我們學習了 makefile 相關的知識,接下來我們也將要學習 shell 相關的知識,以便在以後的嵌入式開發中能更快、更高效的完成任務。學習於果子玩轉 Linux 下 SHELL 編程

        那麼什麼是 shell 呢?shell 是結餘用戶與系統之間,幫助用戶與系統進行溝通的工具。關係如下圖

圖片.png

        那麼除了文字模式的 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!"

        運行結果如下

圖片.png

        我們看到在執行的時候,它說沒有權限,然後我們執行上面的第二步。再來看看

圖片.png

        我們已經成功地用 shell 輸出了經典的 hello world。那麼上面的那句 #!/bin/bash 是什麼意思呢?它的意思是用 bin 目錄下的 bash 腳本解釋器來對其進行解釋。

        下來我們來看看 shell 中的變量。在 shell 中,變量分爲系統環境變量和 UDV (user defined variable)變量。系統環境變量是系統本身所有,通常爲大寫字母,系統變量是通過 set 或 declare 指令進行查看;而 UDV 變量則是由用戶創建和爲維護的,我們建議定義其時進行大寫的定義。那麼這時爲什麼呢?因爲 Linux 系統的命令全部採用的是小寫方式,我們應避免衝突與混淆。

        那麼 shell 中所有變量定義都是字符串;應區分變量的大小寫,如:var 和 Var 是兩個不同的變量;變量必須以字母或下劃線開頭,不得有“,”;‘:’;“\”等特殊字符。

        下來我們來進行下實驗

圖片.png

        我們看到在 set | grep PATH 後出現了 PATH 相關的定義。在進行變量的定義時加 , 或者 \ 的時候,都出現了錯誤。下來我們來講講變量的聲明和定義,變量的定義如我們上面所操作的那樣,直接是 變量名=值(變量名與值之間的“=”號沒有空格);如果我們需要聲明帶有空格的變量,那麼我們就必須像定義字符串一樣加上 “” 才行。如果我們需要聲明一個只讀變量,那麼在定義的前面需要加上 readonly;修改環境變量,如PATH=$PATH:/class/bin ,修改用戶自定義變量時,如:DIR="hello"。

        我們想要使用變量的話,應在變量前面加 “$”符號,在上面的示例中也展示了。echo $DIR 或 echo ${DIR}。那麼上面兩種用法有何區別呢?我們爲何要在 shell 中使用變量,又爲何要添加界定符 {} 呢?

        下來我們還是以實驗爲例來進行講解:第一種寫法:

#!/bin/bash
echo "/home/aston/test"

        我們來看看執行後的結果

圖片.png

        我們再來看看第二種寫法

#!/bin/bash
PWD="/home/aston/test"

echo $PWD

圖片.png

        我們看到效果是一樣的,但是第二種看起來就非常的簡潔明瞭,所以我們在 shell 中定義變量是爲了提高代碼的可讀性。下來我們來看看界定符的作用。在有的版本中,界定符是爲了保證我們如果在一個環境變量後面追加東西時,它會直接寫到這個環境變量的路徑後面。在有的版本中,這個好像沒什麼作用了。不過我們儘量還是加上界定符,以保證最大的正確率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章