Linux的shell編程前奏之基礎技能實戰一linux
前言:shell腳本語言是實現linux/unix系統管理及自動化運維所必備的重要工具,linux/unix系統的底層及基礎應用軟件的核心大都涉及shell腳本的內容shell
一>寫一個簡單的清理系統日誌文件/var/log/messages的shell腳本程序。 編程
#!/bin/sh #此shell腳本用於清理/var/log/messages系統日誌 LOG_DIR=/var/log ROOT_UID=0 if [ "$UID" -ne "$ROOT_UID" ] then echo "Must be root can run the shellScript" exit 1 fi cd $LOG_DIR ||{#若是切換到指定目錄不成功,||前面的不成功就執行||後面的,&&前面的成功就執行&&後面的 echo "cannot change to necessary directory" exit 1 } cat /dev/null>messages &&{ echo "logs cleaned up" exit 0 } echo "Logs cleaned up fail." exit 1
總結:bash
1>shell是一個命令解釋器,它的做用是解釋執行用戶輸入的命令及程序,用戶每輸入一條命令,shell就執行解釋一條。運維
2>由內到外,硬件---系統核心-----命令解釋器----外圍應用程序。shell存在於操做系統的最外層,負責與用戶直接對話,把用戶的輸入解釋給操做系統,並處理各類各樣的操做系統的輸出結果,而後輸出到屏幕返回給用戶。ide
輸入系統用戶名和密碼並登錄到linux後的全部操做都是由shell解釋執行的。工具
3>shell腳本語言很適合用於處理純文本類型的數據,是一種弱類型的語言,分爲Bourne shell(sh,ksh,bash),C shell(csh,tcsh)。測試
4>linux經常使用操做系統默認的shell是bash,能夠用echo $SHELL顯示。spa
5>shell腳本的執行的兩種方式:A.sh shell腳本名稱 B. ./shell腳本名稱操作系統
二>實現系統中屢次執行某一個腳本後的進程只有一個。
#!/bin/sh pidpath=/tmp/a.pid if [ -f "$pidpath" ] then kill "cat $pidpath" >/dev/null 2>&1 rm -f $pidpath fi echo $$ >$pidpath sleep 300
總結:
1>經常使用export來定義環境變量。若是但願環境變量永久生效,則能夠將其放在用戶環境變量文件或者全局環境變量文件裏。
2>經常使用(變量名=value)的形式定義普通變量。
當不加引號定義變量時,值裏有變量的會被解析後再輸出;
當加雙引號定義變零時,值裏有變量和命令(命令須要反引)的會被解析後再輸出;
當加單引號定義變量時,,即便值裏有變量和命令(命令須要反引)也會原樣輸出;
3>把一個命令的結果做爲變量的內容賦值的方法:A. 變量名=`ls` B.變量名=$(ls)
4>用echo等命令輸出變量的時候,也能夠用不加引號,單引號,雙引號,反引號,例如:echo $A,echo "$A",echo `$A`,echo '$A',和上面的總結一致。
5>經常使用文件測試操做符:
-d文件(directory) 文件存在且爲目錄則爲真,即測試表達式成立。
-f文件(file) 文件存在且爲普通文件則爲真,即測試表達式成立。
-e文件(exist) 文件存在則爲真,即測試表達式成立。
-r文件(read) 文件存在且可讀則爲真,即測試表達式成立。
-s文件(size) 文件存在且文件大小爲零則爲真,即測試表達式成立。
-w文件(write) 文件存在且可寫則爲真,即測試表達式成立。
-x文件(executable) 文件存在且可執行則爲真,即測試表達式成立。
-L文件(link) 文件存在且爲連接文件則爲真,即測試表達式成立。
f1 -nt f2 文件f1比文件f2新則爲真,即測試表達式成立。根據文件的修改時間來計算。
f1 -ot f2 文件f1比文件f2舊爲真,即測試表達式成立。根據文件的修改時間來計算。