Shell基礎教程--2.變數和運算子

來源:互聯網
上載者:User

標籤:

2.變數和運算子

  2.1.變數的類型

    本地變數;環境變數;變數替換(顯示變數);位置變數;標準變數;特殊變數;

  2.2.本地變數

    本地變數在使用者現在的shell生命週期的指令碼中使用

    在命令列, LOCALTEST="test" 設定本地變數,$ echo $LOCALTEST 顯示本地變數

     set 命令可以查看這個shell的生命週期有哪些本地變數

     readonly LOCALTEST ,就可以將LOCALTEST設定成唯讀本地變數,不能再對其進行賦值操作,此時若執行如 LOCALTEST="local" 就會報錯。注意設定成readonly的變數就不可能再重新變回可寫的了,所以要謹慎使用

     readonly ,就可以查看系統中有多少唯讀變數

  2.3.環境變數

    環境變數用於所有使用者進程(經常成為子進程)。登入進程稱為父進程。shell中執行的使用者進程均稱為子進程。不像本地變數(只用於現在的shell),環境變數可用於所有子進程,這包括編輯器、指令碼和應用。

    環境變數既可以用於父進程又可以用於子進程,環境變數都包含在本地變數中;但是不是環境變數的本地變數不能運行於所有的子進程中

    在$HOME/.bash_profile這個設定檔裡面設定對應使用者的環境變數;在/etc/profile這個設定檔裡面設定所有使用者的環境變數

    用 export CHINAPATH="china" 來設定環境變數

    用 env 或者$ export 來輸出所有環境變數的資訊

    同樣可以用類似 readonly CHINAPATH 的命令將環境變數設定為唯讀

  2.4.變數替換

    變數替換就是用變數的值替換它的名字

    ${Variable_name} 或者 $Variable_name ,顯示實際值到Variable_name

    ${Variable_name:+value} ,如果設定了Variable_name,則顯示value,否則為空白

    ${Variable_name:?value} ,如果未設定Variable_name,顯示使用者自訂的錯誤資訊value

    ${Variable_name:-value} ,如果未設定Variable_name,則顯示value,如果設定過了就顯示Variable_name的值

    ${Variable_name:=value} ,如果未設定Variable_name,設定其值為value,並顯示,如果設定過了就顯示Variable_name的值

  2.5.變數清除

    例如, unset CHINAPATH ,就是清除變數CHINAPATH的值,若再執行 echo CHINAPATH就顯示空值

    readonly的變數也是不能unset的

  2.6.位置變數

    位置變數表示$0,$1,$1,$2,……,$9

$0 $1 $2 $3 $4 $5 $6 $7 $8 $9
指令碼名字                  

    作用1:在指令碼中使用位置參數,例如指令碼parm.sh

#!/bin/bash#測試位置變數echo "這是指令碼的名稱:$0"echo "這是指令碼的第一個位置參數:$1”echo "二:$2"echo "三:$3"echo "四:$4"echo "五:$5"echo "六:$6"echo "七:$7"echo "八:$8"echo "九:$9"

    執行命令 chmod u+x parm.sh,再執行./parm.sh A B C D E,輸出結果

這是指令碼的名稱:./parm.sh這是指令碼的第一個位置參數:A二:B三:C四:D五:E六:七:八:九:

    作用2:向系統命令傳遞參數,例如

#!/bin/bash#parm_1.shfind /home/perfect/shell -name $1 -print

    執行命令 chmod u+x parm_1.sh,再執行./parm_1.sh myfile.txt,其就是等價於命令 find /home/perfect/shell -name myfile.txt -print

   2.7.標準變數

    bash預設建立了一些標準環境變數,可在/etc/profile中定義。

    比如EXINIT、HOME、IFS、PATH、LOGNAME、MAIL、MAILCHECK……

  2.8.特殊變數

    $# 傳遞到指令碼的參數個數

    $* 以一個單字串顯示所有向指令碼傳遞的參數。與位置變數不同,此選項參數可超過9個

    $$ 指令碼啟動並執行當前的ID號

    $! 後台啟動並執行最後一個進程的進程ID

    [email protected] 傳遞到指令碼的參數列表,使用時需要加引號,並在引號中返回每個參數

    $- 顯示shell使用的當前選型,與set命令功能相同

    $? 顯示最後命令的退出狀態。0表示沒錯誤,其他任何職表明有錯誤

    看一個執行個體

#!/bin/bash#parm_2.shecho "顯示參數個數:¥#"echo "顯示指令碼的全部參數:$*"echo "顯示進程ID:$$"echo "顯示前一個命令運行後狀態:$?"

    執行命令 chmod u+x parm_2.sh,再執行./parm_2.sh A CHINA chinaitalb 輸出結果因不同的機器而不同

顯示參數個數:3顯示指令碼的全部參數:A CHINA chinaitalb顯示進程ID:7799顯示前一個命令運行後狀態:0

  2.9.影響變數的命令

    declare 用來設定或顯示變數。 -f 只顯示函數名; -r 建立唯讀變數(declare和typeset,不能用 + 顛倒); -x 建立轉出變數; -i 建立整數變數; 使用 + 代替 - ,可以顛倒選項的含義

    export 用於建立子shell的變數。 -- 表明選項結束,所有的後續參數都是實參; -f 表明在“名-值”對中的名字是函數名; -n 把全域變數轉換成局部變數,換句話說,命令的變數不再傳給shell; -p 顯示全域變數列表

    readonly 用於設定或顯示唯讀變數。 -- 表明選型結束; -f 建立唯讀變數

    set 設定或重設各種shell

    shift 用於移動位置變數,調整位置變數,例如 shift 1將$3的值賦給$2,將$2的值賦給$1,而 shift 2將$3的值賦給$1,規律以此類推

    typeset 用於顯示或設定變數。 是declare的同義字

    unset 用於取消變數的定義。 -- 表明選項結束; -f 刪除唯讀變數,但不能取消從shell環境中刪除指定的變數和函數,如PATH、PS1、PS2、UID、PPID、EUID……的設定

  2.10.引號

    引號的必要性:變數和替換操作,在指令碼裡執行變數替換時最容易犯的一個錯誤就是引用錯誤。例如 echo ert* 和 echo "ert*" 的區別

  2.11.雙引號(依然有疑問)

    使用雙引號可以引用除了字元 $、`(反引號)、\ 之外的的任一字元或字串

    可以測試 

echo "ert, $SHELL * \nchina`echo itlab`"

    輸出結果是

ert, /bin/bash * chinaitlab

  

  2.12.單引號

    單引號與雙引號類似,不同的是shell會忽略任何引用值。換句話說,如果屏蔽了其特殊含義,會將引號裡的所有字元,包括引號都作為一個字串

    可以測試 

echo ‘ert, $SHELL * \nchina`echo itlab`‘

    輸出結果是

ert, $SHELL * china`echo itlab`

  2.13.反引號

    反引號用於設定系統命令的輸出到變數。shell將反引號中的內容作為一個系統命令,並執行其結果,例如可以測試

echo "* china`echo itlab`"

    輸出結果是

* chinaitlab

  2.14.反斜線

    如果一個字元有特殊含義,反斜線防止shell誤解其含義,即屏蔽其特殊含義 。下述字元包含有特殊含義:$ & * + ^ ` " | ?

    例如 echo \*,其輸出結果是 *,而 echo * 是輸出目前的目錄下的所有檔案名稱

  2.15.運算子

    運算子是一個對電腦發的指令。

    運算對象:數字、字元(子面值);變數;運算式

    運算式:運算子和運算對象的結合體

  2.16.運算子類型

    按位元運算符:~,<<,>>,&,|,^。與C裡面的按位元運算符相同

    $[ ]表示形式告訴shell對方括弧裡的運算式求值,例如

#!/bin/bashecho $[ 2+8 ]echo $[ 2<<4 ]

    執行結果是

1032

    邏輯運算子:&&,||,>,<,==,!=。和其他語言也都是一樣的,舉例

#!/bin/bashecho $[ 2&&2 ]echo $[ 2&&0 ]echo $[ 2>0 ]

  

    執行結果是

101 

    賦值運算子:=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=。和其他語言也是一樣的

    let count = $count + $change

    let count += $change

    例子:

#!/bin/bashvar=65echo $varlet var+=4echo $var

    執行結果是 

6569

  2.17.運算式替換

    $[ ]和$(())。習慣使用$[ ],所有shell的求值都是用整數完成的

    $[ ]可以接受不同基數的數字。$[ base#n ] 中 n 表示基數從2到36的任何基數,例如執行命令 echo $[ 10#8+1 ] ,執行結果是 9。意思是 8 進位的 10 去加 1 操作,所以結果是9

  2.18.運算子優先順序

Shell基礎教程--2.變數和運算子

相關文章

聯繫我們

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