shell scripts其實就是在用一系列有序的shell命令和shell scripts語法編寫成的在shell環(huán)境下運行的程序。它的寫法和命令幾乎沒有差別,只是它可以把很多命令放在一起一次執(zhí)行碉哑,而不必一次一次的下達命令蒙揣。你還可以寫一些定時運行的腳本自動幫你做你可能會重復做的操作,總之在很多時候有很大便利柬采。但也有缺點细移,就是系統(tǒng)管理完全夠用但是數(shù)值計算就不是shell scripts所擅長的了搏予。
如果寫過C程序的話,那么shell簡直不成問題弧轧,因為它的語法跟C太像了雪侥。
shell scripts的執(zhí)行方式
用vim編輯好腳本文件后,有幾種執(zhí)行方式:
直接命令下達:這需要文件有讀和執(zhí)行的權限(rx)精绎。輸入該文件的絕對路徑或相對路徑執(zhí)行速缨;把該文件放在PATH 指定目錄,像ls代乃、cat等命令一樣可以在任意工作目錄下直接輸入檔名執(zhí)行旬牲。
以bash程序執(zhí)行:用指令 【sh ? ? 腳本檔名】或者【bash? 腳本檔名】執(zhí)行,一般用前者搁吓。
還有一種執(zhí)行方式 ——source命令? 原茅,它與sh命令的區(qū)別就是:source命令執(zhí)行的環(huán)境是父程序,sh的執(zhí)行環(huán)境是子程序堕仔,也就是說sh新開了一個bash來執(zhí)行你的scripts擂橘。例如你的程序里有個變量temp,并且賦了值摩骨,你在bash下echo這個變量是不存在的通贞;但是如果用source執(zhí)行,你就能echo出temp的值仿吞。(大概好比一個全局一個局部滑频,這樣可以理解吧捡偏。)
環(huán)境變量
因為scripts里用的也是shell命令唤冈,所以它需要聲明環(huán)境變量,說明它呼叫的功能在哪里找得到银伟,類似于C的頭文件你虹。當然你也可以寫一些函數(shù)放在一個文件里,把這個文件加在環(huán)境變量的聲明里,這樣你就可以在你的腳本里直接用你自己的函數(shù)了肃叶。
這個環(huán)境變量一定在腳本文件的所有命令和程序內容之前聲明蕴茴。格式大概如下:
#被注釋的部分,僅供程序功能董饰、版本蒿褂、時間等的說明,便于以后查錯更改
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin #環(huán)境變量
export PATH #全局聲明
卒暂。啄栓。。程序部分也祠。昙楚。。诈嘿。
判斷
1堪旧、test指令
這個指令可以測試文檔的是否存在、類型奖亚、權限等淳梦,還可以判斷數(shù)值大小、判定字符串等昔字。
test命令并不會在屏幕上顯示結果谭跨,我們可以結合&&、||來顯示李滴,如:
2螃宙、判斷符號 [ ]
這個中括號的功能也是判斷,例如判斷變量是否為空:
但是注意:中括號內每個元素都要用空格隔開
3所坯、shell scripts的默認變量
$0 $1 $2 $3...這些是系統(tǒng)默認的變量谆扎,跟在腳本文件后作為參數(shù)
還有這幾個
“$@”和“$*”兩個稍微有點差別,但是一般記住前者就好芹助。
4堂湖、判斷式
? ?? 1) ?? if ...then...elif...then..else...fi ? ?
? ? ? 2)case....esac
這種把各個變量的情況羅列出來,再給出處理過程状土,是不是跟C語言一樣无蜂。
?5、函數(shù)功能
可以把你重復的一系列操作寫在一個個函數(shù)里蒙谓,這樣每次就可以直接調用函數(shù)斥季,減少工作量。
要注意的是這些函數(shù)一定寫在主體的前面,不然調用時會找不到酣倾。當然你做成一個函數(shù)庫寫在環(huán)境變量里也行舵揭。
循環(huán)
1、while...do..done
2躁锡、until...do...done
3午绳、 for...do...done
1)這種寫法變量var的值會依次為con1,con2,con3.....
如果con1,con2...是連續(xù)整數(shù)的話,可以用"$(seq m n)"替代映之,seq表示連續(xù)的從m到n拦焚。n大于等于m。
2)第二種寫法杠输,C語言一定不陌生耕漱,只是注意一細節(jié),兩個括號以及變量的表示