iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 3
0
自我挑戰組

30 天的 ShellScript 教室解決開發者的困擾系列 第 3

[鐵人賽第03天] 變數與 echo

今天先來講執行程式的基本,變數要怎麼宣告與使用。

在 Shell 或是 ShellScript 如果要宣告一個變數,只要用 = 號就可以宣告,左邊是變數名稱,右邊是變數內容,等號前後不可以有空白、等號前後不可以有空白、等號前後不可以有空白

這是一個宣告變數的範例:

CFG="--set-upstream -q --all"

這個範例中,我們宣告了一個叫做 CFG 的變數,內容是 --set-upstream -q --all ,至於為什麼會有雙引號……請複習上一篇!至於等號後面有空白不跳脫的功能,則是「執行後面的指令帶入這個變數」,像是你可以下 LANG=C apt-get 這樣只有這次執行 apt-get 的時候,會轉成英文,剩下的指令還是顯示中文。

JavaScript 可以用 console.log("HELLO WORLD");Hello World、 Pyhton 可以用 print("HELLO WORLD") 。在 Shell 裡面可以用 echo HELLO WORLD 把字串印出來。如果是變數呢?在 Shell 裡面則是用 $ 號讓 Shell 知道這是個變數,所以我們可以下指令 echo $CFG 把剛剛的東西印出來。

不過用 echo 印內容有個小問題,就是當你的內容是 -n 的時候,因為 echo 這個指令可以帶 -n 參數進去(用意是印完之後不換行),怎麼解決之後再說。

確認資料寫進去變數,就可以來正是用,下面就是個使用案例:

git push $CFG -f

Shell 收到你打的這堆東西,會先去找 $CFG 是什麼東西,替換後變成以下的指令:

git push --set-upstream -q --all -f

再去呼叫 git ,告訴它有五個參數(下略)。

那如果今天是這樣呢:

BASE_URL="http://localhost/api"

然後我要測試我的 API api_getList ,也就是 http://localhost/api_getList 是否正常,我懶得重複打 prefix 總可以吧?

curl $BASE_URL_getList?mode=1

等等,他不會動!是的,整個黏再一起 Shell 並不會去找 BASE_URL ,而是會去找 BASE_URL_getList 。這怎麼辦呢?用跳脫符號 \ 嗎?雖然跳脫符號確實有用,不過太難懂的,所以還是講個正經的做法吧:

curl ${BASE_URL}_getList?mode=1

這樣也可以明確讓 Shell 知道你要找 BASE_URL 這個變數,然後跟後面的 _getList?mode=1 要黏黏再一起,中間不要有空白。

不過直接用 NAME=CONTENT 宣告,進去 vim 裡面打 :!echo $NAME 沒東西,這是因為這種宣告方式宣告的東西,不會讓送到底下的環境。如果要讓 vim 或是其他環境可以吃到,前面要加個 export ,變成這樣:
export NAME=CONTENT

以上就是 Shell 裡面變數的宣告與使用,今天寫夠多了,還差點寫超過 12 點,明天見。


我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。


上一篇
[鐵人賽第02天] 單引號、雙引號與跳脫字元
下一篇
[鐵人賽第04天] 各種環境變數介紹
系列文
30 天的 ShellScript 教室解決開發者的困擾23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言