python和shell對比


python和shell都是我們經常使用的腳本語言,平時python主要用來寫一些小型的任務,shell則在使用liunx系統部署任務的時候用的比較多,由於兩者有一些相似之處,時間長了容易混掉,所以這里作文對一些基礎的語法需求總結、比較、歸納,以為后用。 

變量

python定義和使用只需要使用變量名,例如

var=“hello” print var # hello
  • 1
  • 2
  • 3

shell定義變量只需要變量名,而使用變量的值則需要加$符號,例如

var="hello" echo $var # hello
  • 1
  • 2
  • 3

數組的定義

python中沒有數組的概念,但是有list,tuple,dict等可以代替其功能,聲明一個list並使用其中的一個元素如下

numbers=[1,2,3,4,5] print numbers[0] # 1
  • 1
  • 2
  • 3

shell中只有一維數組,其聲明和使用方法如下

numbers=(1 2 3 4 5) print ${numbers[0]} # 1 #返回所有的值用 print ${numbers[*]} # 1 2 3 4 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注釋

python和shell都可以是用#號添加單行注釋,python可以使用”’注釋”’添加多行注釋

邏輯判斷

條件的定義

在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.

而shell的理念大不相同,它使用test命令來進行條件測試,它通常寫成[ condition ]的形式,注意方括號兩邊都要有空格,它支持三類測試: 
* 數值比較,需要用-eq,-gt來代替==,> 
* 字符串比較,可以用=,需要用-n之類的短命令,比如-n str來判定str長度是否非零 
* 文件比較,需要用短命令,例如-e file判斷文件是否存在

邏輯運算符&&,||來連接不同的[ condition ]

另外,高級的數學表達式推薦使用(( expression ))邏輯判定,可以使用自增++,位移運算符<<,位運算符&,邏輯與&&等等 
高級的字符串判定使用[[ expression ]]邏輯判定,可以用類似於正則表達式如[[ $teststr== r* ]]判定以r開頭的字符串 
shell的數值運算推薦使用$[expression]的方式計算,浮點數的計算使用echo “expression”| bc的方式獲取計算值

if else

python中的if else使用方式如下,條件語句后加冒號,並且以縮進划分語句塊

if condition: statement elif condition: statement else: statement
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

shell中則不同,其if else使用方式如下,它使用then和elseif或fi來界定語句塊,理論上不需要縮進

if [ condtion ] then statement elif [condtion] then statement else statement fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

for循環

python的for循環使用如下,仍然用縮進划分語句塊

for item in sequence: statement
  • 1
  • 2

shell中for的使用方式類似

for item in list do statement done
  • 1
  • 2
  • 3
  • 4

其中shell取item的分隔符全局變量為IFS(internal field separator),其默認值為空格,制表符,換行符,所以如果需要按行處理而忽略空格的話需要改變IFS的值 
另外shell還支持c語言形式的for循環,它使用雙小括號來完成,形式如下

for (( i=1; i<=10;i++)) do statement done
  • 1
  • 2
  • 3
  • 4

while循環

python的while寫法如下

while condition: statement
  • 1
  • 2

shell的while寫法如下

while [ conditon ] do statement done
  • 1
  • 2
  • 3
  • 4

異常處理

python的異常處理方式

try: statement except: statement finally: finalStatement
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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")
  • 1
  • 2
  • 3
  • 4
  • 5

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
  • 1
  • 2
  • 3

使用shell

cat filename|while read line do echo $line done #或者 IFS='\n' for line in `cat filename` do echo $line done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

函數

python的函數如下形式

def functionname(params): '函數文檔' statement return value
  • 1
  • 2
  • 3
  • 4

其中函數文檔可以通過functionname.doc獲得 
shell中函數形式

function functionname { commands return value }
  • 1
  • 2
  • 3
  • 4

使用變量獲取返回值,參數通過函數functionname param1 param2的方式傳遞,通過$1,$2的方式取出第一第二個參數,$#為參數數量,$*為所有參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM