什么是shell
Shell本身是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋梁,用戶的大部分工作都是通過Shell完成的
Shell有兩種執行命令的方式:
交互式(Interactive):解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條。
批處理(Batch):用戶事先寫一個Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條一條地敲命令。
第一個腳本:
vi hello.sh 一般shell腳本都以.sh為結尾
#!/bin/bash echo 'hello world' // #!是一個約定的標記,告訴系統該腳本使用哪個解釋器來執行 echo 命令用於向窗口輸出文本
./hello.sh,即可打印hello world字符串了
下面我們寫一個停止mysql的腳本:
vi mysql_stop.sh
#!/bin/bash pid=`ps -ef|grep mysql|grep -v grep|awk '{print $2}'` // =號后的符號是左tab鍵上邊的那個符號,不是單引號,千萬不要加錯``兩個符號之間代表是命令,變量名和‘=’后不能有空格 //ps -ef|grep mysql用來查詢mysql的進程,grep -v grep用來屏蔽grep的進程,awk用來取查詢結果的第二列的值,即進程號 kill -9 $pid //kill -9 用來殺進程,$pid是用來取變量值,要加$符號
如上,一個停止mysql的腳本就完成了,我們只需要運行mysql_stop.sh這個腳本就可以停止mysql了
假設mysql未啟動,這個腳本再運行的時候就會報錯了,那么我們需要在shell腳本里加入if判斷語句
#!/bin/bash pid=`ps -ef|grep mysql|grep -v grep|awk '{print $2}'` if [ $pid ] //if語句開始,[]括號中是條件,[]中前后一定要有空格 then //then if語句的結構,條件滿足時執行then后的內容 kill -9 $pid else //else 后為條件不滿足時,執行的內容 echo 'mysql started' fi //fi 代表if語句的結束,一定要加,否則腳本運行時會報錯
還有一種情況是ps查詢出的進程有很多個,那我們如何殺掉進程呢,這時需要用到xargs命令
#!/bin/bash pid=`ps -ef|grep lampp|grep -v grep|wc -l` if [ $pid -ge 2 ] // -ge是shell的函數之一,相當於“大於等於”,shell中只能用shell特定的運算函數,可查看詳細列表,該條件的意思是查詢到的lampp進程行數大於2時執行then的內容 then ps -ef|grep lampp|grep -v grep|awk '{print $2}'|xargs kill -9 //以上語句中,xargs的意義:將awk取到的所有進程號全部傳給kill -9 ,殺掉全部進程 else echo 'lampp stopped' fi
所以,shell中常用的幾種命令大家要牢記了