shell腳本變量


既然是變量,自然分變量名和變量值,在使用的時候一定要注意哪些地方需要用變量名,哪些地方需要用變量的值。

自定義變量

shell變量不需要聲明,隨用隨定義,給變量賦值的時候要注意

  • shell是空格敏感的
  • 使用{}確定變量的范圍是個好習慣
$NEWENV =123                #等號前面有空格,不行
NEWENV: command not found   
$NEWENV= 123                #等號后面有空格,不行
123: command not found  
$NEWENV=123                 #RIGHT 
$BRACE=123
$echo $BRACEEEE

$echo ${BRACE}EEE
123EEE

位置變量

指shell腳本的命令參數,shell script將執行的命令放在存儲在0,命令之后的參數依次存儲在1,2...,可以通過取值(eg$0)利用這些變量,就可以編寫帶參數的腳本,當參數值大於9時,需要使用{}括起來,否則$10就相當於在$1之后加了字符0。注意,定義函數的參數列表也使用$1, $2 etc,注意與命令行的參數相區分,函數內的$1etc是用來傳參的,但$0還是保持原來的含義

$cat ./shell.sh 
#!/bin/bash
echo "$10"
echo "${10}"
$./*.sh 11 22 33 44 55 66 77 88 99 00
110
00

內嵌變量

#

目前進程的參數個數,可以通過$# 獲得其值,多用在循環中

 while [ $# != 0 ]
 do
    case $1 in
    ...
    esac
    shift
done

@

傳遞給當前進程的命令行參數,如果置於雙引號內,會展開為個別的參數, $@ 代表命令后接的每一個參數字符串,類似"$1", "$2", "$3". 否則和$*都是一樣的。

*

當前進程的命令行參數,$* 代表命令后接的參數的集合字符串,類似"$1c$2c$3", c為分隔符,默認為空格鍵,加上" "表示一個字符串,不加和$@一樣, 這兩個參數可以用來將參數傳遞給其他腳本或函數

$cat ./shell.sh 
#!/bin/bash
my(){
	echo $#
}
echo "$(my $@)"
echo "$(my "$@")"
echo "$(my $*)"
echo "$(my "$*")"
$./*.sh 11 "22 33" 44
4
3
4
1

-

在引用時給予shell的選項

?

  • 前一個命令的退出狀態,$?IMPORTANT,只和上一條命令有關
  • 如果上一條命令的執行成功,里面的值是0,否則里面的值是一個正數
  • 上一條test語句的返回結果,如果test結果為真,則為0,如果test結果為假,則為1
  • shell的函數的返回值只能使用$?接收

$

shell的進程編號(PID),可以通過$$獲得其值

$echo $$
3730

最近一個后台命令的進程編號,以此方式存儲進程編號,即在終端中的histroy命令,可通過wait供之后使用

環境變量

我們所執行的任何一個程序,都是由父進程fork出來的一個子進程,子進程結束之后,將返回發哦父進程中去,當子進程被產生的時候,將會從父進程那里獲得一定的資源分配,以及(更重要的是)繼承父進程的環境。環境變量就是傳遞給子進程的變量,"遺傳性"是區分本地變量和環境變量的決定性指針,環境變量只能從父進程到子進程單向繼承,換句話說,在子進程中的環境如何變更,均不會影響父進程的環境。下面是幾個比較常用的缺省繼承環境變量的值,當前終端下更多環境變量的值可以使用export -p查看

ENV

一般引用則僅用於交互式shell中,展開為讀取和啟動時要執行的第一個文件的完整路徑名稱

HOME

表示家目錄

IPS

分隔符,默認為空格,tab和換行

LINENO

剛執行過的行在腳本或函數的行編號

PPID

父進程的PID

PS1

主要的命令提示符,默認是$

PS2

行繼續的命令提示符,默認是>

PS4

set +x 設置的執行跟蹤的提示字符串,默認是+

PWD

當前的工作目錄

$echo $LANG
en_AU.UTF-8
$echo "$LINENO"
8
$echo "$PATH"
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/linux/toolchain/gcc-4.6.4/bin:.
$echo "$PPID"
2647
$ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
linux     2647  0.0  2.2 110152 11540 ?        Rl   07:51   0:01 gnome-terminal
$echo "$PWD"
/home/linux

數組

shell使用形如arr=(var1 var2...)的形式定義,即元素使用空格分開,使用${arr[n]}訪問數組編號為n的元素

$arr=(0 1 2 var)
$echo "${arr[0]}"
0
$echo "${arr[3]}"
var

我們也可以對元素進行單獨賦值

$arr[3]=qq
$echo "${arr[3]}"
qq

顯示數組的所有元素

$echo "${arr[@]}"
0 1 2 qq
$echo "${arr[*]}"
0 1 2 qq

顯示數組中元素的個數

$echo "${#arr[@]}"
4
$echo "${#arr[*]}"
4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM