Shell: Shell script小教學

Simon Chu
Bucketing
Published in
5 min readJun 19, 2020

讓我們來淺談shell script

Photo by Crystal Jo on Unsplash

基礎介紹

讓我們先看看一般的shell script長甚麼樣子

  • 第一行的 #!/bin/bash 表示使用何者直譯器去執行,如範例是使用 bash,若為 python 則為 #!/usr/bin/env python,依照所需要的直譯器去做設定。
  • 第三行$(date) 為我們需要某項指令執行結果時,可使用 $() 指定執行內容,此處不推薦使用``,因若要執行指令包含指令如"$(command "$(command1)")"就會造成需使用\`跳脫字元。
    此處有相關說明 [Google style guide]
  • 第四行及第六行的$0 $@ $#等等,表示輸入之參數
>>> bash shell_script_example.sh file1.txt file2.txt$0  => shell_script_example.sh
$1 => file1.txt
$@ => file1.txt file2.txt
$# => $@的個數
  • 第七行大於符號代表資料導向,>是覆蓋,>>是累加,而數字1代表stdout ,數字2代表stderr,若要將所有輸出都儲存於同一個檔案可使用2>&1
  • 第八行$?代表上一行(第七行)的執行結果,若成功$?為0,若失敗$?則為對應之錯誤代碼
    if 條件判斷式建議使用[[...]],因[[[ 的優化版

1. 可使用 =~做regex判斷,與 ==!=判斷方法。
2. 可使用 &&||處理 if 條件判斷結果,達到三源運算子的效果。
3. 沒有空白分詞,因此可不必 "變數"

此處有相關說明 [Google style guide]

經過上述簡單介紹是否有對 shell script 有點觀念了呢 ?
但是否有些實情需要每次開機後執行 ? 讓我們繼續看下去

開機後自動執行

- rc.local 方式

rc.local 是 CentOS以前版本的方式,在CentOS 7中仍然以兼容的形式存在,雖仍可用,但不推薦(推薦使用systemd service)

  1. 寫一個要執行的腳本 ( test_rclocal.sh ),並添加執行權限

2. 在 /etc/rc.d/rc.local 配置文件中添加執行腳本指令(使用絕對路徑

/root/test_rclocal.sh > Log.txt

3. 添加 /etc/rc.d/rc.local 的執行權限,在centos7中 /etc/rc.d/rc.local 沒有執行權限,需要手動添加

chmod +x /etc/rc.d/rc.local

以上三步,即可使 /root/test_rclocal.sh 指令在系統啟動時會自動執行。

- chkconfig 方式

  1. 寫一個要執行的腳本 ( test_chkconfig.sh ),並添加執行權限

2. 在/etc/rc.d/init.d/目錄下添加一個可執行腳本 test.sh

>>> vim /etc/rc.d/init.d/test.sh
#!/bin/bash
# chkconfig: 2345 90 10
# description: test chkconfig
/root/test_chkconfig.sh > Log.txt

上述 test.sh 腳本的需遵照一定的格式 # chkconfig: 2345 90 10, 其中 2345指定服務在哪些執行中開啟或關閉,90 表示啟動的優先級(0 – 100,越大優先級越低),10表示關閉的優先級。
執行等級包括
0:表示關機
1:單用戶模式
2:無網絡連接的多用戶命令行模式
3:有網絡連接的多用戶命令行模式
4:保留未使用
5:帶圖形界面的多用戶模式
6:重新啟動

相關說明 [ chkconfig ]

3. 加入開機時的啟動服務列表

>>> chkconfig --add testchkconfig

使用 chkconfig --list 可查看當前開機自啟動的服務列表,但此命令只顯示SysV服務,不包含systemd服務,查看systemd服務可使用systemctl list-unit-files命令。

以上三步,即可使/root/test_chkconfig.sh > Log.txt 在系統啟動時自動執行。

- 自定義 systemd service 方式

  1. 在 /usr/lib/systemd/system 目錄下創建 nginx.service 文件
>>> vim /usr/lib/systemd/system/nginx.service 

相關說明 [ systemd.service ]

2. 設定開機執行

>>> sudo systemctl enable nginx.service

以上兩步,就將nginx服務配置成了在操作系統啟動時自動啟動。

參考資源

--

--