目錄
正文
在linux系統(tǒng)中,我們一般都是用C語言寫服務端程序,但是一般我們不直接啟動這個程序,而是通過一個shell腳本啟動和關閉(需要設置一些環(huán)境變量和防止打開多個改程序,打開多個后需要找到pid才能關閉)
那么shell是什么呢?
說白了shell是操作系統(tǒng)提供給我們的一種語言,用來將用戶的命令輸送到內(nèi)核中執(zhí)行
1首先我新建一個test2.sh,存放下面的一段shell代碼
2保存后,修改這個shell為可執(zhí)行文件 chmod +x test2.sh
輸出結(jié)果:
下面分別介紹字段的含義
第一行:一般默認第一行都是上面這段#! /bin/sh,通知系統(tǒng)用/bin/sh來執(zhí)行下面的程序。
以“#”開頭的行代表注釋
echo代表輸出后面一段話的到用戶界面
$name代表使用了name這個變量(定義shell變量在下面介紹)
$* 代表所有的參數(shù)(我們在shell命令后面加了hello 和world兩個參數(shù))
$#代表參數(shù)的個數(shù)
有了初步的認識,我們就開始踏入shell編程吧!
定義shell變量:(注意等號左邊右邊不可以有空格)
shellname=value
使用shell變量
$shellname
代表第幾個參數(shù)
例如$1代表第一個參數(shù),按照上面的代碼就是hello
還有下面的一些$符號的使用。
可能會對$?有一點費解,例如我們在shell中調(diào)用了一個C語言程序mydemo,其中mydemo這個主函數(shù)會返回100(這里不寫c代碼了)
#! /bin/sh./mydemoecho $?
shell輸出值:100
也可以是執(zhí)行一段shell函數(shù),獲取該函數(shù)的返回值(最后講函數(shù)說到)
如果我們想在shell中執(zhí)行一段命令,并將該命令的值存放到一個變量中,就要用到` `符號(在1數(shù)字旁邊)
#! /bin/shresult=`ls`echo result=$result
ls命令顯示當前文件夾下有哪些文件
輸出結(jié)果:result=test.sh ...
我們在運行shell的時候,可能需要我們輸入一些數(shù)據(jù),除了帶參數(shù)的方式我們還可以使用read進行讀
輸出結(jié)果:
read命令讀取一個輸入行,直至遇到換行符。
行尾的換行符在讀入時將被轉(zhuǎn)換成一個空字符
如果read命令后有變量名,輸入內(nèi)容賦給該變量。
如果read命令后未跟變量名,讀入的行將被賦值給內(nèi)置變量REPLY。
shell也會像高級語言支持if,while等計算
格式:(fi代表這個if結(jié)束)
if (test condition) then commandselse commandsfi
格式:
if [ -option file]; then commandselse commandsfi
代碼:
運行
查看dir1文件夾是否存在,因為我創(chuàng)建了一個,所以是存在的。
其中還有一些其他選項
代碼格式:([右邊和]左邊都要有一個空格哦,done代表循環(huán)結(jié)束,當條件不成立時候循環(huán)結(jié)束)
while [ expr ];do commandsdone
代碼demo(大家可以自己驗證哈)
同樣也支持像switch那樣的分支選擇語句的
代碼格式:(如果有一個pattern匹配到跟string內(nèi)容一樣,執(zhí)行這里面的內(nèi)容,否則執(zhí)行最下面的*分支,;;兩個分號代表退出case循環(huán),跟C語言的break)
代碼格式:(會遍歷這個list數(shù)組,將當前值存放到varname變量中,后面的分號也是必不可少的哦
exit code
#! /bin/shfunction fun1{ echo "第一個參數(shù):$1" echo "第二個參數(shù): $2" return 100}fun1 3 4echo "函數(shù)返回值:$?"
#! /bin/shme=`whoami`PID=`ps -u $me |grep mydemo|awk {'print $1'}`if( test "$PID" = "" ) then `mydemo`fi
聯(lián)系客服