bash中變量的種類
?根據變量的生效范圍等標準: 本地變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效 環境變量:生效范圍為當前shell進程及其子進程 局部變量:生效范圍為當前shell進程中某代碼片斷(通常指函數) 位置變量:$1, $2, ...來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數 注:腳本運行是在當前shell的子shell下運行的,如有(command)括號中的再開一個子shell,腳本shell之下開啟的子shell,不可以調用的其他腳本的本地變量 特殊變量:$?, $0, $*, $@, $#
本地變量
變量賦值:name=‘value’, 可以使用引用value: (1) 可以是直接字串; name=“root" name=var name=“xxx xxx xx”多個字符串中間有空格的需要用引號如果不引用其他變量或引用命令的話單雙引號都可以。 (2) 變量引用: $name, ${name} $a $b $ab ${a}b name="$USER" 通過引用起它變量的值賦值 (3) 命令引用:name=`COMMAND`, name=$(COMMAND) 注:可以多行內容賦值到一個變量。 變量引用:${name}, $name "":弱引用,其中的變量引用會被替換為變量值 '':強引用,其中的變量引用不會被替換為變量值,而保持原字符串 "弱引用----雙引號 [root@localhost ~]# echo "echo $USER" echo root ''強引用------單引號 [root@localhost ~]# echo 'ehco $USER' ehco $USER ``命令引用----~下的符號 [root@localhost ~]# echo `echo $USER` Root 顯示已定義的所有變量:set 刪除變量:unset name 腳本運行完畢要釋放變量。養成良好習慣。
環境變量
環境變量的使用必須先聲明 變量聲明、賦值: export name=VALUE declare -x name=VALUE declare - name=number 聲明變量為數值型 變量引用:$name, ${name} 顯示所有環境變量: export env printenv 刪除:unset name bash有許多內建的環境變量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1 聲明環境變量后,shell的子進程及其子進程的子進程都可使用。 新的終端后就不可以使用。 注 source 腳本 和 . 腳本 執行腳本效果是一樣的,都是在當前shell下執行。 當前shell下的用戶可調用該腳本的本地變量 通過 bash 腳本和直接執行 ./腳本 效果是一樣的,都是在當前shell下開啟子shell后運行的。 當前shell不可以調用該腳本定義的本地變量。
只讀和位置變量
只讀變量:只能聲時,但不能修改和刪除,不能使用unset撤銷。 readonlyname=VLAUE declare -r name=VLAUE 可以與-x一起使用 declare -rx name=VALUE 只讀的環境變量 位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數 $1, $2, ...:對應第1、第2等參數,shift [n]換位置 $0: 命令本身,腳本名稱。 $*: 傳遞給腳本的所有參數,全部參數合為一個字符串 $@: 傳遞給腳本的所有參數,每個參數為獨立字符串 $#: 傳遞給腳本的參數的個數 $@ $* 只在被雙引號包起來的時候才會有差異 [root@yangyouwei ~]# ./test1.sh a b first a b secd all a b ======== first a secd b all a b [root@yangyouwei ~]# cat test1.sh #!/bin/bash ./test2.sh "$*" echo ======== ./test2.sh "$@" [root@yangyouwei ~]# cat test2.sh #!/bin/bash echo first "$1" echo secd "$2" echo all "$*"
shift
位置參數可以用shift命令左移。比如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。不帶參數的shift命令相當于shift 1。
腳本test1加上參數a和b 調用腳本test2 test1中 test2運行兩次但是調用的 參數不同 (雖然某些情況下$*和$@效果是一樣的,在這里這兩個變量的值作為test2的參數,參與test2的執行。) 示例:判斷給出的文件的行數 linecount="$(wc-l $1| cut -d' ' -f1)" echo "$1 has $linecountlines."
declare
-i 聲明為整數 -a 聲明為數組 -f 聲明為函數 -r 聲明為只讀
local 局部變量
定義局部變量 多用于函數內部的變量定義。定義后該變量只在該函數體內部生效。
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/38465