讓我們來淺談shell script
基礎介紹
讓我們先看看一般的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)
- 寫一個要執行的腳本 ( 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 方式
- 寫一個要執行的腳本 ( 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 方式
- 在 /usr/lib/systemd/system 目錄下創建 nginx.service 文件
>>> vim /usr/lib/systemd/system/nginx.service
相關說明 [ systemd.service ]
2. 設定開機執行
>>> sudo systemctl enable nginx.service
以上兩步,就將nginx服務配置成了在操作系統啟動時自動啟動。