Shell 編程入門步步高__編程

來源:互聯網
上載者:User

http://blog.51cto.com/zt/267

原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://johnwang.blog.51cto.com/474770/326073

shell簡介   shell處於kernel的外層,用來負責接收使用者輸入的命令,然後將命令解釋成kernel能瞭解的方式,然後由kernel去執行,再將結果傳回預設的輸出周邊。shell是一種命令直譯器,同時也是一個程式語言。shell有很多種,在眾多的Linux發行版中,標準的shell是bash,也是我們學習的主要對象。   第一個程式 範例:hello.sh #!/bin/bash echo 'Hello World'   執行之前,給予執行許可權: chmod +x hello.sh   執行: ./hello.sh   輸出: Hello World   這樣第一個shell指令碼就成功的運行了。


基礎概念部分   登陸主機 登陸主機分為本地登陸和遠程登陸。 本地登陸:就是直接面對主機,由鍵盤輸入使用者密碼登陸,使用tty1-tty6,或者圖形介面tty7 遠程登陸:通過網路連接主機,以虛擬終端的方式登陸,使用ssh   退出登陸 1.使用命令exit 2.使用【Crtl+D】退出   檔案 在Linux中,任何東西包括硬體都視為檔案。檔案可以分為幾種: 一般檔案:純文字檔案,二進位檔案。如果檔案具有執行許可權,稱為執行檔案。 目錄:包含檔案。 裝置檔案:字元檔案,磁碟檔案。 內部進程通訊檔案:socket檔案,串連檔案(pipe、fifo)兩種。 特殊檔案:符號連結檔案,soft link或者symbolic link 隱藏檔案:檔案名稱的第一個字元是一個點(.) 常見檔案代碼: -   一般檔案 d   目錄 l   符號連結檔案 b   塊檔案 c   字元檔案 s   socket檔案 p  管道檔案   目錄 目錄也是檔案的一種,目錄中可以包含子目錄和檔案。   萬用字元 萬用字元是指一種檔案名稱的樣式,可用來對比檔案名稱,以找到相符的檔案。 * 代表任意的字串,可以是Null 字元串 ? 代表一個字元,但不可以為空白   轉義符 反斜線 \ 是逸出字元,也叫做“逃逸字元”,目的在於使後接的字元回複原來作為單純字元的用途。   字元集合 [abc] 代表a,b,c中任意的一個字元 [a-z] 代表a到z中的任意一個字元,小寫英文字母 [A-Z] 代表大寫英文字母 [A-Za-z] 代表字母 [0-9] 代表數字 [a-z_-] 代表任意一個小寫英文字母,_ 或者 - [!0-9] 代表非數字 [0-9!] 代表數字或驚嘆號 [\!0-9] 代表數字或驚嘆號   括弧擴充 {g,nc,s}ftp 代表gftp ncftp sftp


shell程式的基本組成結構   shell結構大體是由設定變數、內建命令、shell的文法結構、函數組成。 使用執行個體說明:test.sh #!/bin/bash #說明使用/bin/bash作為這個指令碼的解譯器 #定義一個函數 function my_fun () { echo "Hello, $1,today is $2" } #定義連個變數 name=$1 today=`date` #函數調用 my_fun "$name" "$today"   上面的這個指令碼要想運行還需要做一些操作,首先給予執行許可權 chmod +x test.sh 然後執行 ./test.sh john 輸出 Hello, john,today is Tue Jun  1 14:51:46 CST 2010   父shell和子shell 在執行script之前,身處的環境就是父shell。執行script之時,父shell根據#!/bin/bash,fork出來一個新的shell環境,然後在子shell中執行,執行完畢後子shell結束,任然回到父shell中,這樣不會影響到父shell的環境。   login shell 和non-login shell 這張圖片是login shell的流程,當是non-login shell時,只執行方框中的標註的部分。由這張圖我們可以知道,在如下幾種情況下,執行的流程。 登陸(login) /etc/profile ~/.bash_profile   登出(logout) ~/.bash_logout   執行新shell,分成兩種情況 1.執行互動shell ~/.bashrc /etc/bashrc   2.執行非互動shell,比如執行script 會檢查 BASH_ENV 變數的內容,如果有定義,則執行


變數   變數是暫時用來儲存資料的地方,是一個記憶體空間。bash shell和其他的程式設計語言,沒有“資料形態”,也就是說預設情況下不區分一個變數是整型還是浮點型等,除非你使用declare語句申明變數類型。在bash shell中,預設只有一種資料型,就是由字元組成的字串。同時,設定的變數只在當前的shell中存在,也就是,每一個shell都會維護一份他們自己的變數,彼此不會有影響。可以把變數匯出成環境變數,這樣其他的shell就可以被子shell引用。   變數的命名規則: 1.可以使用英文字母、數字和底線組成 2.第一個字元不能是數字 3.區分大小寫   變數設定: 變數名=值 例如:name=john 建議這樣設定變數:name="john" 或者name='john' 在引用變數的時候使用雙引號和單引號是有區別的,單引號不會進行變數替換。而在雙引號中,如果也想抑制變數替換,則需要使用轉義符反斜線 \   引用變數: $變數名 建議這樣引用變數:${變數名}   環境變數: 使用下面的任意一個方法可以使name變為環境變數 1.name="john"    export name 2.export name="john" 3.declare -x name="john"   bash的一些重要的內建變數: $1 ~ $n  參數位置。當n超過9後,使用${n},例如${10} $* 代表所有的參數位置,而且視為一個字串 $@ 代表所有的參數位置,但是代表各位置參數組成的串列 $# 參數的個數 $? 上一個命令的傳回值 $! 上一個後台進程的編號 $$ 目前shell的進程編號


進階變數   進階變數中的3個主題: 變數擴充:${變數名} 命令替換:$(命令) 算術擴充:$((算術式))   測試變數存在與否R=${name-'john'},如果name不存在,則“傳回”預設值。 測試變數不存在或者為空白置R=${name:-'john'} ,如果name不存在或者存在但為空白,則“傳回”預設值。 測試變數不存在或值為空白,則給變數一個預設值R=${count:=100} 測試變數不存在或值為空白,則提示出錯訊息${變數名:?提示訊息}


算術運算   歸納為5種方法 1.算術擴充,例如R=$((1+1)) 2.使用外部程式expr,例如R=`expr 1+1` 3.使用$[],例如R=[1+1] 4.使用命令declare,例如declare -i R=1+1 5.使用命令let,例如let R=1+1


流程式控制制   if-then if 條件; then    動作 fi

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.