shell:腳本慨念介紹
1、shell腳本簡介
- 在解釋shell腳本這個名詞之前,我們先來說下什麼是shell
1.1、什麼是shell
- shell是一個命令解釋器,它在操作系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操作系統,並處理各種各樣的操作系統的輸出結果,輸出到屏幕返回給用戶。這種對話方式可以是交互的方式(從鍵盤輸入命令,可以立即得到shell的迴應),或非交互(腳本)的方式。
- 下面的圖中×××部分就是命令解釋器shell處於的操作系統中的位置。
提示:- shell英文是貝殼的意思,從上圖我們可以看出,命令解釋器shell就像一個貝殼一樣包住了系統核心。
2、什麼是shell腳本
- 當linux命令或語句不在命令行下執行(嚴格說,命令行也是shell),而是通過一程序文件執行時,該程序就被稱爲shell腳本或shell程序,shell程序很類似dos系統下的批處理程序(擴展名*.bat)。用戶可以在shell腳本中敲入一系列的命令及命令語句組合。這些命令、變量和流程控制語句等有機的結合起來就形成了一個功能強大的shell腳本。
###2.1、舉例:
案例1、清除/var/log下messages日誌文件的簡單命令腳本
- 把所有命令放在一個文件裏堆積起來形成了腳本,下面就是一個最簡單的命令堆積形成的shell腳本。
- 要使用root身份來運行這個腳本。
-
清除日誌腳本,版本1
cd /var/log cat /dev/null >messages echo "logs cleaned up." 提示:/var/log/messages 是系統的日誌文件,很重要
看完這個腳本大家有什麼想法?
- 上面的腳本,如果不是root就無法執行清理日誌。
- 沒有任何的流程控制語句,簡單的說就是順序操作,沒有成功判斷和邏輯性。
案例2:包含命令、變量和流程控制語句的清除/var/log下messages日誌文件的shell腳本。
[root@1-241 scripts]# vim messages.sh
[root@1-241 scripts]# cat messages.sh
#!/bin/sh
#清空日誌腳本
LOG_DIR=/var/log
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "must be root to run this scripts."
exit 1
fi
cd $LOG_DIR || {
echo "cannot change to necessary directory." >&2
exit 1
}
cat /dev/null > messages && echo "log cleaned UP."
exit 0
拓展:清空日誌及文件內容的三種方法:
[root@1-241 scripts]# echo >/var/log/nginx/ccs_access.log
[root@1-241 scripts]# >/var/log/nginx/ccs_access.log
[root@1-241 scripts]# cat /dev/null >/var/log/nginx/ccs_access.log