Shell Script on Linux
前陣子用linux shell script寫了module自動deploy機制。紀錄一下這之中遇到的問題及常用的指令。
簡單的自動deploy不外乎就是將檔案傳送至遠端機器然後進行安裝動作,修改設定檔。
login to remote server
由於原生shell script裡面無法自動輸入帳密進行登錄動作,基本上常用的方法有兩種。
第一種方法就是建立ssh public key然後放在遠端機器上,這樣你ssh時就不需要再輸入密碼。
第二種方法是安裝其它套件協助自動輸入密碼。在這裡我介紹的是使用sshpass。
安裝完後要記得自己先手動登入一次遠端機器,不然它不會作用。接下來你要登入遠端機器的指令就如下
1
|
|
這樣就可以登入遠端機器並輸出一個hello world。
另外你也可以用scp來拷貝資料過去
1
|
|
這樣就可以把data.zip丟到遠端/home/root/目錄
execute command on remote server
簡單地方法就是在sshpass之後帶入command
1
|
|
這樣就可以在登入後執行mkdir及rm兩個指令。 另一種方法就是把你要執行的指令寫成一個shell script,然後scp過去後執行。例如我把這兩行指令寫在myScript.sh裡
1 2 3 |
|
然後執行底下指令
1 2 |
|
retrieve the specified string from a line
例如我有一個my.xml檔裡面紀錄了最新的版號如下
1 2 3 |
|
用底下的指令來取出版號
1
|
|
由於(, ), /是特殊字元,所以在re裡前面都要加上\
後面的\1表示要取result的第一個group。
整個用$()包覆是因為要把執行結果放進latest這個變數。
replace string in a config file
使用sed指令加上regular expression
1
|
|
這樣就可以把config.txt裡面所有字串裡中間有MyTest替換成YourTest
insert a new line in a config file
使用sed指令加上regular expression
1
|
|
這樣就可以在config.txt裡面插入新的一行YourTest在每一行符合中間有MyTest的字串。