1. 程式人生 > 實用技巧 >shell的變數學習

shell的變數學習

1、變數定義

  定義變數如:

1 your_name="jack"

  注意,變數名和等號之間不能有空格。同時,變數名的命名須遵循如下規則:
    命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。

2、變數運用

  使用一個定義過的變數,只要在變數名前面加美元符號即可。如:

1 your_name="jack"
2 echo $your_name
3 也可以echo ${your_name}

3、只讀變數

  使用 readonly 命令可以將變數定義為只讀變數,只讀變數的值不能被改變。

  語法:readonlyvariable_name

4、刪除變數

  使用 unset 命令可以刪除變數。

  語法:unset variable_name

5、變數型別

  字串是shell程式設計中最常用最有用的資料型別:數字,字串,陣列。字串可以用單引號,也可以用雙引號。

  1.字串:

    (1)單引號字串的限制:

      單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
      單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字串拼接使用。

    (2)雙引號的優點:

      雙引號裡可以有變數
      雙引號裡可以出現轉義字元

    (3)獲取字串的長度:

1 echo ${#your_name}

    (4)訪問字串裡的字元:

1 echo ${your_name:1:2}

    (5)查詢字串裡的字元:

1 ·expr index ${your_name}  a·

    (6)expr命令詳解:

 1 NAME
 2        expr - evaluate expressions
 3 
 4 SYNOPSIS
 5        expr EXPRESSION
 6        expr OPTION
 7 
 8 DESCRIPTION
 9        --help display this help and exit
10 
11        --version
12               output version information and exit
13 14 Print the value of EXPRESSION to standard output. A blank line below 15 separates increasing precedence groups. EXPRESSION may be: 16 17 ARG1 | ARG2 18 ARG1 if it is neither null nor 0, otherwise ARG2 19 20 ARG1 & ARG2 21 ARG1 if neither argument is null or 0, otherwise 0 22 23 ARG1 < ARG2 24 ARG1 is less than ARG2 25 26 ARG1 <= ARG2 27 ARG1 is less than or equal to ARG2 28 29 ARG1 = ARG2 30 ARG1 is equal to ARG2 31 32 ARG1 != ARG2 33 ARG1 is unequal to ARG2 34 35 ARG1 >= ARG2 36 ARG1 is greater than or equal to ARG2 37 38 ARG1 > ARG2 39 ARG1 is greater than ARG2 40 41 ARG1 + ARG2 42 arithmetic sum of ARG1 and ARG2 43 44 ARG1 - ARG2 45 arithmetic difference of ARG1 and ARG2 46 47 ARG1 * ARG2 48 arithmetic product of ARG1 and ARG2 49 50 ARG1 / ARG2 51 arithmetic quotient of ARG1 divided by ARG2 52 53 ARG1 % ARG2 54 arithmetic remainder of ARG1 divided by ARG2 55 56 STRING : REGEXP 57 anchored pattern match of REGEXP in STRING 58 59 match STRING REGEXP 60 same as STRING : REGEXP 61 62 substr STRING POS LENGTH 63 substring of STRING, POS counted from 1 64 65 index STRING CHARS 66 index in STRING where any CHARS is found, or 0 67 68 length STRING 69 length of STRING
View Code

  2.陣列:

  bash支援一維陣列(不支援多維陣列),並且沒有限定陣列的大小。
  類似於 C 語言,陣列元素的下標由 0 開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於 0。

  (1)定義陣列:
    在 Shell 中,用括號來表示陣列,陣列元素用"空格"符號分割開。定義陣列的一般形式為:
    陣列名=(值1 值2 ... 值n)
  (2)讀取陣列:
    讀取陣列元素值的一般格式是:${陣列名[下標]}
  (3)獲取陣列的長度:
    獲取陣列長度的方法與獲取字串長度的方法相同,例如:

1 # 取得陣列元素的個數
2 length=${#array_name[@]}
3 # 或者
4 length=${#array_name[*]}
5 # 取得陣列單個元素的長度
6 lengthn=${#array_name[n]}

6、變數作用範圍

  (1)使用者自定義變數
    在 shell 中執行程式時,shell 會提供一組環境變數。export 可新增,修改或刪除環境變數,供後續執行的程式使用。export 的效力僅限於該次登陸操作。
    格式:
    export 變數名=變數值 [...變數名n=變數值n]
  (2)環境變數
    環境變數配置檔案:
      全域性配置檔案:/etc/profile
      使用者配置檔案:~/.bash_profile
  (3)檢視環境變數
    set命令可以檢視所有的shell變數,其中包括環境變數

 1 #常見的環境變數
 2 $USER 檢視賬戶資訊
 3 $logname 登入相關資訊
 4 $UID
 5 $Shell
 6 $HOME 家目錄
 7 $pwd
 8 $PATH 使用者所輸入的命令是在哪些目錄中查詢
 9 $PS1
10 $PS2
11 $RANDOM 隨機數

  (4)位置變數

1 表示為:$n (n為1~9之間的數字)
2 #./test.sh one two three four five six
3 $0 表示檔名本身
4 one就是:$1
5 two就是:$2

  (5)預定義變數

1 $# :命令列中位置引數的個數
2 $* :所有位置引數的內容
3 $? :上一條命令執行後返回的狀態,當返回狀態值為0時表示執行正常,非0表示執行異常或出錯
4 $$ :當前所在程序的程序號
5 $! :後臺執行的最後一個程序號
6 $0 :當前執行的程序/程式名