shell--变量的替换
生活随笔
收集整理的這篇文章主要介紹了
shell--变量的替换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 變量的替換
- 小知識加油站--trap
- 使用trap設計一個用于反應程序執行過程的腳本
變量是什么,變量是腳本編程中進行數據表現的一種方法,說白了,變量不過是計算機為了保留數據項,而在內存中分配的一個位置或一組位置的標識或名字。
變量的替換
變量的名字就是保存變量值的地方,引用變量的值就叫做變量替換
$
在shell中要仔細區分變量的名字和變量的值,如果a是一個變量,那么$a就是引用這個變量的值,即變量所包含的數據。
andrew@andrew-Thurley:/work/linux-sys/bash$a=1 andrew@andrew-Thurley:/work/linux-sys/bash$ echo a a andrew@andrew-Thurley:/work/linux-sys/bash$ echo $a 1當變量裸體出現的時候,也就是說沒有$前綴的時候,那么變量可能存在如下幾種情況
trap.sh
#!/bin/bash # 使用trap來捕捉變量值.trap 'echo Variable Listing --- a = $a b = $b' EXIT # EXIT是腳本中exit命令所產生信號的名字. # # "trap"所指定的命令并不會馬上執行, #+ 只有接收到合適的信號, 這些命令才會執行. echo "This prints before the \"trap\" --" echo "even though the script sees the \"trap\" first." echo a=39 b=36 exit 0 andrew@andrew-Thurley:/work/linux-sys/bash/2.基本/src$ bash trap.sh This prints before the "trap" -- even though the script sees the "trap" first.Variable Listing --- a = 39 b = 36被一雙引號""括起來的變量替換是不會被阻止的,所以雙引號被稱為部分引用,有的時候又被稱為弱引用。如果是使用單引號的話''那么比變量的替換就會被禁止,變量名只會被解釋成字面的意思,不會出發變量的替換。所以單引號被稱為全引用,有的時候被稱為強引用
#!/bin/bash# 變量賦值和替換a=375 hello=$a#------------------------------------------------------------------ # 強烈注意, 在賦值的的時候, 等號前后一定不要有空格. # 如果出現空格會怎么樣?# "VARIABLE =value" # #% 腳本將嘗試運行一個"VARIABLE"的命令, 帶著一個"=value"參數.# "VARIABLE= value" # #% 腳本將嘗試運行一個"value"的命令, #+ 并且帶著一個被賦值成""的環境變量"VARIABLE". #------------------------------------------------------------------ echo hello # 沒有變量引用, 只是個hello字符串. echo $hello echo ${hello} # 同上.echo "$hello" echo "${hello}"echohello="A B C D" echo $hello # A B C D echo "$hello" # A B C D # 就象你看到的echo $hello和echo "$hello"將給出不同的結果. # =============================================================== # 引用一個變量將保留其中的空白, 當然, 如果是變量替換就不會保留了. # ===============================================================echoecho '$hello' # $hello # # 全引用的作用將會導致"$"被解釋為單獨的字符, #+ 而不是變量前綴.# 注意這兩種引用所產生的不同的效果.# 設置為空值. hello= echo "\$hello (null value) = $hello" # 注意設置一個變量為null, 與unset這個變量, 并不是一回事 #+ 雖然最終的結果相同(具體見下邊).# --------------------------------------------------------------# 可以在同一行上設置多個變量, #+ 但是必須以空白進行分隔. # 慎用, 這么做會降低可讀性, 并且不可移植.var1=21 var2=22 var3=$V3 echo echo "var1=$var1 var2=$var2 var3=$var3"# 在老版本的"sh"上可能會引起問題.# --------------------------------------------------------------echo; echonumbers="one two three" # other_numbers="1 2 3" ## 如果在變量中存在空白, If there is whitespace embedded within a variable, #+ 那么就必須加上引用. # other_numbers=1 2 3 # 給出一個錯誤消息. echo "numbers = $numbers" echo "other_numbers = $other_numbers" # other_numbers = 1 2 3 # 不過也可以采用將空白轉義的方法. mixed_bag=2\ ---\ Whatever #在轉義符后邊的空格(\).echo "$mixed_bag" # 2 --- Whateverecho; echoecho "uninitialized_variable = $uninitialized_variable" # Uninitialized變量為null(就是沒有值). uninitialized_variable= # 聲明, 但是沒有初始化這個變量,#+ 其實和前邊設置為空值的作用是一樣的. echo "uninitialized_variable = $uninitialized_variable"# 還是一個空值.uninitialized_variable=23 # 賦值. unset uninitialized_variable # Unset這個變量. echo "uninitialized_variable = $uninitialized_variable"# 還是一個空值. echoexit 0像C語言中的變量一樣,一個未初始化的變量將會是null值 - 就是未賦值(但并不代表值是0),在給變量 賦值之前就使用這個變量通常會引起問題。
小知識加油站–trap
trap的格式如下,功能就是捕捉信號,并對信號進行處理
trap [-lp] [[arg] sigspec ...]trap使用官方簡介
trapAutomatically execute commands after receiving signals by processes or the operating system.Can be used to perform cleanups for interruptions by the user or other actions.- List available signals to set traps for:trap -l- List active traps for the current shell:trap -p- Set a trap to execute commands when one or more signals are detected:trap 'echo "Caught signal SIGHUP"' SIGHUP- Remove active traps:trap - SIGHUP SIGINT- arg可以是shell命令或者自定義函數
- sigspec可以是以下的一個或多個
- 定義在<signal.h>中的信號名或者數值。信號名的大小寫不敏感,SIG這個前綴也是可選的。以下的命令的效果都是一樣的
調試腳本時,trap經常用到的信號量
- EXIT:在shell退出前執行trap設置的命令,也可以指定為0
- RETURN:在.和``source執行其他腳本返回時,執行trap`設置的命令
- DEBUG:在任何命令執行前執行trap設置的命令,但對于函數僅在函數的第一條命令前執行一次
- ERR:在命令結果為非0時,執行trap設置的命令
執行結果
andrew@andrew-Thurley:/work/linux-sys/bash/2.基本/src$ bash trap_func.sh before a func iis called before a func iis called call . before a func iis called . or source is called before a func iis called 不管你信不信,這是一個函數- trap -l:列出所有信號的數值和名字,類似于kill -l
- trap -p:列出通過trap設置過的信號處理命令
注意
- 在函數中設置的trap也是全局生效的
- 對于同一個信號,只有最后一次trap生效
- trap只在本進程內有效,它的子進程不會繼承trap的設置。
使用trap設計一個用于反應程序執行過程的腳本
#!/bin/bash # 使用trap來捕捉變量值.# EXIT代表在函數退出前,執行trap trap 'echo Variable Listing --- ret=${ret}' EXITps -A if [ $? == 0 ];thenecho "commond exec OK!"ret=0 elseret=1 fiecho "注意這里,還沒有調用trap"# trap是在退出的時候清理程序時調用的 exit 0總結
以上是生活随笔為你收集整理的shell--变量的替换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: trap--shell脚本调试的不二人选
- 下一篇: 作者:刘建楠(1963-),男,就职于中