python和shell像嗎

johnchou發表於2021-09-11

python和shell像嗎

python和shell都是我們經常使用的指令碼語言,平時python主要用來寫一些小型的任務,shell則在使用liunx系統部署任務的時候用的比較多,由於兩者有一些相似之處,時間長了容易混淆,所以在這裡給大家介紹一下兩者的用法區別。

變數

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中只有一維陣列,其宣告和使用方法,如下:

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

註釋

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

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

if [ condtion ]
then
 statement
elif [condtion]
then
 statement
else
 statement
fi

for迴圈

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

while迴圈

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("linen")

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的方式取出第一第二個引數,$#為引數數量,$*為所有引數。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4422/viewspace-2835951/,如需轉載,請註明出處,否則將追究法律責任。

相關文章