python和shell都是咱們常常使用的腳本語言,平時python主要用來寫一些小型的任務,shell則在使用liunx系統部署任務的時候用的比較多,因爲二者有一些類似之處,時間長了容易混掉,因此這裏做文對一些基礎的語法需求總結、比較、概括,覺得後用。 php
python定義和使用只須要使用變量名,例如python
var=「hello」 print var # hello
shell定義變量只須要變量名,而使用變量的值則須要加$符號,例如正則表達式
var="hello" echo $var # hello
python中沒有數組的概念,可是有list,tuple,dict等能夠代替其功能,聲明一個list並使用其中的一個元素以下算法
numbers=[1,2,3,4,5] print numbers[0] # 1
shell中只有一維數組,其聲明和使用方法以下shell
numbers=(1 2 3 4 5) print ${numbers[0]} # 1 #返回全部的值用 print ${numbers[*]} # 1 2 3 4 5
python和shell均可以是用#號添加單行註釋,python可使用」’註釋」’添加多行註釋express
在python中,除了全部的空值被認爲False外全部的值都被解釋爲真True,這裏的空值包括:None,0,」「,(),{},[]和False,下面是例子
其餘的由比較運算符進行比較支持,其中比較特殊的操做符有
* x is y x和y是同一個對象
* x is not y
* x in y x在y集合中
* x not in y數組
邏輯預算法用and,or,not.bash
而shell的理念大不相同,它使用test命令來進行條件測試,它一般寫成[ condition ]的形式,注意方括號兩邊都要有空格,它支持三類測試:
* 數值比較,須要用-eq,-gt來代替==,>
* 字符串比較,能夠用=,須要用-n之類的短命令,好比-n str來斷定str長度是否非零
* 文件比較,須要用短命令,例如-e file判斷文件是否存在函數
邏輯運算符&&,||來鏈接不一樣的[ condition ]測試
另外,高級的數學表達式推薦使用(( expression ))邏輯斷定,可使用自增++,位移運算符<<,位運算符&,邏輯與&&等等
高級的字符串斷定使用[[ expression ]]邏輯斷定,能夠用相似於正則表達式如[[ $teststr== r* ]]斷定以r開頭的字符串
shell的數值運算推薦使用$[expression]的方式計算,浮點數的計算使用echo 「expression」| bc的方式獲取計算值
python中的if else使用方式以下,條件語句後加冒號,而且以縮進劃分語句塊
if condition: statement elif condition: statement else: statement
shell中則不一樣,其if else使用方式以下,它使用then和elseif或fi來界定語句塊,理論上不須要縮進
if [ condtion ] then statement elif [condtion] then statement else statement fi
python的for循環使用以下,仍然用縮進劃分語句塊
for item in sequence: statement
shell中for的使用方式相似
for item in list do statement done
其中shell取item的分隔符全局變量爲IFS(internal field separator),其默認值爲空格,製表符,換行符,因此若是須要按行處理而忽略空格的話須要改變IFS的值
另外shell還支持c語言形式的for循環,它使用雙小括號來完成,形式以下
for (( i=1; i<=10;i++)) do statement done
python的while寫法以下
while condition: statement
shell的while寫法以下
while [ conditon ] do statement done
python的異常處理方式
try: statement except: statement finally: finalStatement
shell中沒有相應的異常處理機制,只有每條命名的錯誤輸出描述符2,能夠經過2>&1將錯誤輸出重定向到標準輸出
python使用open函數,其有讀寫模式有隻讀r,只寫w,添加a
myfile=open("filename","r") myfile.readlines() myfile.close() with open("finename","w") as myfile: myfile.write("line\n")
shell讀取文件的內容使用命令來讀取,而後使用管道或者重定向進行輸入處理,經常使用的命令有
1. cat filename 讀取文件的所有內容
2. tail -n 2 filename讀取尾兩行
3. head -n 2 filename讀取前兩行
一個經典的問題,讀取一個文件中的每一行作處理,使用python很簡單
with open("filename","r") as myfile: for line in myfile.readlines(): print line
使用shell
cat filename|while read line do echo $line done #或者 IFS='\n' for line in `cat filename` do echo $line done
python的函數以下形式
def functionname(params): '函數文檔' statement return value
其中函數文檔能夠經過functionname.doc得到
shell中函數形式
function functionname { commands return value }
使用變量獲取返回值,參數經過函數functionname param1 param2
的方式傳遞,經過$1,$2的方式取出第一第二個參數,$#爲參數數量,$*爲全部參數。