shell筆記之變數 Shell代碼 #!/bin/bash # #開頭的行注釋 # shell指令碼的第一行一般都是#!/bin/bash 表示由/bin/bash負責解釋 www.2cto.com # 定義變數 str="string value" num=123 echo str is :\"$str\" echo num\'s value is: $num # 注意: # 1、"="兩邊沒有空格,任何空格會導致錯誤。 # 2、雖然在定義一個字時可以省略引號,但是當定義的變數值多於一個字時(包含空格或定位字元),引號是必須的。 # 3、雖然通常可以使用雙引號,但可能導致錯誤。使用單引號禁用了成為擴充的bash特性 www.2cto.com # 參數變數(用單引號禁止來擴充) # $0 表示執行的命令本身,如此指令碼是 env.sh # $1 表示第一個參數, $2表示第二個參數,如此類推; # $@ 表示一次引用所有的變數,它擴充成所有用空格分隔開的命令列參數; # $# 表示傳遞給指令碼的變數數目; echo '$0 is ' $0 echo '$1 is ' $1 echo '$2 is ' $2 echo '$3 is ' $3 echo '$# is ' $# echo '$@ is ' $@ # 環境變數,使用export命令設定,使用unset取消 export editor=vim unset editor # 變數預設值 # ${parameter:-word} 如果parameter沒有設定或者為空白,則shell擴充word並替換結果。parameter的值並沒有更改。 # ${parameter:=word} 如果parameter沒有設定或者為空白,則shell擴充word並將結果指派給parameter。這個值然後被替換。不能用這種方式指派位置參數或特殊參數的值。 # ${parameter:?word} 如果parameter沒有設定或者為空白,shell擴充word並將結果寫入標準錯誤中。如果沒有word則寫入一條訊息。如果shell不是互動的,則表示存在這個擴充。 # ${parameter:+word} 如果parameter沒有設定或者為空白,則不作替換 www.2cto.com unset x y="abc def" echo "/${x:-'xyz'} /${y:-'xyz'} /$x /$y/" unset x y="abc def" echo "/${x:='xyz'} /${y:-'xyz'} /$x /$y/"