shell程式設計–bash變數

Dabric發表於2018-07-20

bash變數型別


  • 本地變數
本地變數的作用域為整個bash程式。區域性變數屬於本地變數。在bash中宣告變數的週期隨著該程式的週期而存在。
定義本地變數:set VARNAME=Jerry
引用變數:${VARNAME},括號可省略
區域性變數的宣告:local VARNAME=VALUE
  • 環境變數
環境變數的作用域為當前shell程式及其子程式
宣告:export VARNAME=VALUE或者VARNAME=VALUE; export VARNAME

指令碼在執行時會啟動一個子shell程式
命令列中啟動的指令碼會繼承當前shell的環境變數
系統自動執行的指令碼(非命令列啟動)就需要自我定義需要各環境變數
  • 位置變數
$1, $2, ...
shift: 對引數進行輪換,預設輪換一個引數

#!/bin/bash
#
echo $1
shift
echo $1
shift
echo $1
shift

./filetest.sh /etc/fstab /etc/inittab
    $1:/etc/fstab 
    $2:/etc/inittab 
  • 特殊變數
$?: 上一個命令執行狀態的返回值
    程式執行,可能有兩類返回值:
        程式執行結果
        程式狀態返回程式碼(0-255)
            0: 正確執行
            1-255: 錯誤執行。1、2、127系統預留

$#: 引數的個數
$*: 引數列表
$@: 引數列表

變數的撤銷及檢視


  • 撤銷變數
unset VARNAME
  • 檢視變數
set: 檢視當前shell中的變數(包括環境變數和本地變數)

printenv、env、export: 檢視當前shell中的環境變數

變數命名規則


1、變數與變數內容以一個等號"="來連線,如下所示:
    MyName=Dabric
2、等號兩邊不能直接接空格符,如下錯誤:
    MyName= Dabric 或 Myname=Dab ric
3、變數名稱只能是英文字母與數字,但是開頭字元不能時數字;
4、變數內容若有空格符可使用雙引號或單引號將變數內容結合起來,但雙引號內的特殊字元如$等,可以保有原本的特性,如下所示:
    var="lang is $LANG" 則echo $var 可得 lang is en_US.UTF-8
單引號內的特殊字元則僅為一般字元(純文字),如下所示:
    var=`lang is $LANG` 則echo $var 可得 lang is $LANG
    總之在bash中:
    "":弱引用,可以實現變數替換
    ``:強引用,不完成變數替換
5、可以使用跳脫字元""將特殊字元(如[ENTER], $, , 空格符, `等)變成一般字元,如:
    MyName=Dab ric
6、在一串指令的執行中,還需要藉由其他額外的指令所提供的資訊時,可以使用反引號"`COMMAND`"或"$(COMMAND)"。例如想要取得核心版本的設定:
    version=$(uname -r) 
    echo $version
如何進入到您目前核心的模組目錄:
    # cd /lib/modules/`uname -r`/kernel
    # cd /lib/moudles/$(uname -r)/kernel
7、若改變數為擴增變數內容時,則可用"$變數名稱"或${變數}累加內容,如下所示:
    PATH="$PATH":/home/bin 或 PATH=${PATH}:/home/bin
8、若該變數需要在其他子程式執行,則需要以export來使變數變成環境變數:
    # export PATH
9、通常大寫字元為系統預設變數,自行設定變數可以使用小寫字元,方便判斷;
10、取消變數的方法為使用unset:"unset 變數名稱"例如取消MyName的設定:
    # unset MyName
變數可以在bash配置檔案(~/.bashrc)中直接指定,保證每次登入shell該變數都存在

相關文章