shell指令碼變數與參數

來源:互聯網
上載者:User

變數分為三種:
1, 普通變數
即本地變數。variable是變數名

variable=value             //=左右兩邊不能有空格,否則會當做命令來對待,輸出一個command not found

$variable和${variable}都表示其值。
可以使用echo顯示,使用unset清除。

測試變數是否已經賦值 
${variable:-value}  如果變數已經賦值,則使用該變數值。如果變數為空白,則使用value。需要注意的是,value並不賦給variable。 
${variable:=value} 該運算式上面的區別就是,如果variable為空白,則value賦給variable。

如果需要檢驗變數是否為空白,如果為空白的話則顯示帶有系統錯誤資訊,則使用下面的運算式:${variable:?} 
如果需要顯示自己定義的資訊,則如下:${variable:?"customed message "} 

設定唯讀變數
使用readonly可以將變數定義成唯讀。即readonly variable
單獨執行readonly可以顯示所有的唯讀變數。



2, 環境變數
(1) 環境變數設定
ENVIRON-VARIABLE  = value      # 環境變數賦值
EXPORT  ENVIRON-VARIABLE    # 環境變數聲明
env                                             # 查看環境變數
unset  ENVIRON-VARIABLE        # 清除環境變數


(2) 重要的環境變數
PATH、HOME、SHELL、PWD/OLDPWD、USER/UID、PPID、PS1/PS2、IFS等


(3) 幾個環境變數設定檔

系統層級,系統全域環境變數設定:
/etc/profile
/etc/bashrc

普通使用者層級,使用者家目錄下的私人環境變數設定:
~/.bash_profile
~/.bashrc

要搞清bashrc與profile的區別,首先要弄明白什麼是互動式shell和非互動式shell,什麼是login shell 和non-login shell。互動式模式就是shell等待你的輸入,並且執行你提交的命令。這種模式被稱作互動式是因為shell與使用者進行互動。 
這種模式也是大多數使用者非常熟悉的:登入、執行一些命令、簽退。當你簽退後,shell也終止了。 shell也可以運行在另外一種模式:非互動式模式。在這種模式下,shell不與你進行互動,而是讀取存放在檔案中的命令,並且執行它們。當它讀到檔案的結尾,shell也就終止了。

profile與bashrc都用於儲存使用者的環境資訊,profile用於login shell,而bashrc用於non-loginshell。

具體使用方式分別如下:
/etc/profile:此檔案為系統的每個使用者佈建環境資訊,當第一個使用者登入時,該檔案被執行。並從/etc/profile.d目錄的設定檔中搜集shell的設定。

/etc/bashrc:為每一個運行bash shell的使用者執行此檔案。當bash shell被開啟時,該檔案被讀取。有些linux版本中的/etc目錄已經沒有了bashrc檔案。

~/.bash_profile 每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次。預設情況下,它設定一些環境變數,然後執行使用者的.bashrc檔案。

~/.bashrc:該檔案包含專用於某個使用者的bash shell的bash資訊,當該使用者登入時以及每次開啟新的shell時,該檔案被讀取。

另外,/etc/profile中設定的變數(全域)的可以作用於任何使用者,而~/.bashrc等中設定的變數(局部)只能繼承/etc/profile中的變數,他們是"父子"關係。



3, 位置變數
即向指令碼傳遞參數時,可以使用此變數擷取參數。
(1) 一般位置變數
$0  表示指令碼本身
$1  -->  $9     $* / $@是全部參數

(2) 特殊位置變數  
$?      什麼執行狀態。0表示正確,非0表示錯誤。
$* / $@  以一個單字串顯示所有向指令碼傳遞的參數位置參數
$#      位置參數個數
$$      指令碼啟動並執行進程號

 

 

參數讀取

使用特定變數$ 1 . . $ 9向指令碼傳遞參數。$ #用於統計傳遞參數的個數。

#!/bin/shback_days=''while [ -n "$1" ]  do  case "$1" in    -bakDay)  echo "Found the -bakDay option"  echo "The parameter follow -b is $2"back_days=$2shift  ;;  #-c)  #echo "Found the -c option"  #echo "The parameter follow -c is $2"  #shift  #;;  *)  echo "$1 is not an option"  ;;esac  shift  done  #用shell命令自建的選項解析,可以按照自己的想法實現  #優點:自己定製,沒有做不到,只有想不到  #缺點:麻煩  


 

運行結果

[XXXXXXXX  ~]$ ./test.sh -bakDay 7
Found the -bakDay option
The parameter follow -b is 7
back Days is 7

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.