Linux shell 程序設計1——安裝及入門

一、什麼是shell?html

shell是linux內核的「殼」,是用戶和內核的橋樑。它相似於windows下的命令提示符,將用戶輸入的命令解釋給內核執行,並返回給用戶結果。與windows命令提示符不一樣的是,shell仍是一種腳本語言,能夠按必定的流程將命令組合在一塊兒使用,方便了用戶。linux

二、shell的安裝:shell

在ftp.gnu.org/gnu/bash可下載到bash的源碼包:windows

bash-4.1.tar.gzbash

用 tar xzvf bash-4.1.tar.gz 解壓,生成bash-4.1目錄函數

使用cd 命令進入該目錄,在該目錄下執行./configure命令生成配置文件,再使用make命令編譯,使用make install命令安裝。.net

在/etc/shells文件中列出的shell纔是合法的shell,因此要使用安裝的shell必須把它加到該文件中。加入以後就能夠經過chsh命令來切換shell。unix

三、shell中的特殊符號:code

http://blogold.chinaunix.net/u2/75431/showart_1110962.htmlhtm

四、shell的程序結構:

以#!開頭,指名要解釋、執行該腳本的shell,如:

#! /bin/bash

其他以#開頭的行爲註釋。除此以外,一個shell腳本還包括變量設定、內置命令、函數、以及流程控制語句。

下面是一個簡單的shell腳本:

1 #/bin/bash
  2 #This is a test shell script
  3 #It's function is show how to use the function of a shell script
   
  4 /*定義了一個函數,其中$1,$2,$3是傳遞給該函數的參數*/
  5 function show(){
  6     echo "Today is $1.Your name is $2,and your ip address is $3."       
  7 }
  
  8 /*定義了三個變量*/
  9 name="$1"
 10 date=`date +%F`
 11 ip="222.24.19.12"
 
 12 /*$#爲執行shell腳本時傳遞給該腳本的參數的個數,腳本名不計*/ 
 13 if [ $# != 1 ]; then
 14     echo "input error!"
 15     exit
 16 fi

 17 /*調用上面定義的函數*/
 18 show "$date" "$name" "$ip"
 19 
 20 sleep 5
 21 echo     //輸出一個空行
 22 echo "exited!"

五、shell腳本排錯:

在執行shell腳本以前,須要修改該腳本的權限:

chmod 755  腳本名

能夠用兩種方式執行該腳本:

  • ./腳本名 參數 或 bash 腳本名 參數 以這種方式執行一個shell腳本,bash會建立一個子shell來執行,所用的環境是子shell的執行環境,當執行結束後又會回到父shell的執行環境。

  • . /腳本名 參數 或 source 腳本名 參數 以這種方式執行的shell腳本,bash不會建立子shell,而是在本身的環境中執行,執行完成後,若腳本中有修改環境的地方,則bash的環境就會改變。

shell腳本因爲是腳本程序,無需編譯,因此排錯只能依靠閱讀源碼排錯或者是使用 bash -x 腳本名 參數 的執行方式追蹤腳本的執行過程

六、shell腳本執行原理:

用戶在登陸以後,就會進入一個shell環境,稱之爲父shell,其餘腳本執行時稱之爲子shell。每一個用戶都有一個默認的登陸shell,保存在/etc/passwd文件中。用戶可執行chsh修改默認的登陸shell。子shell會繼承父shell的環境變量。子shell也能夠使用 bash命令再建立一個子shell,使用exit 退出一個shell。使用echo $SHLVL能夠查看位於第幾層shell中。

七、bash的啓動配置文件:

用戶登陸時,login shell 會讀取/etc/profile並執行,接着檢查用戶家目錄中是否有.bash_profile,有則執行,而後檢查是否有.bash_login ,有則執行,最後檢查.profile,有則執行。註銷的時候,bash會檢查用戶家目錄中是否有.bash_logout,有則執行。 在執行一個新的shell時,若執行的是交互式shell,或者叫作命令,bash會檢查並執行/etc/bash.bashrc以及家目錄中的.bashrc。若執行的腳本,則檢查BASH_ENV變量,並執行該變量所指向的文件。

相關文章
相關標籤/搜索