Linux shell 基礎

覆手為雲p發表於2017-04-05

  

目錄

一、shell指令碼的基本使用

1、語言規範

2、變數

3、重定向(>,>>)

二、運算子和常用判斷

1、比較運算子

2、邏輯運算子

3、常用判斷

三、程式結構

1、分支(if語句)

2、迴圈

四、函式

 

shell的本質是一段應用程式,它使得使用者和作業系統之間可以互動,是使用者和作業系統的中介。

一、shell指令碼的基本使用

1、語言規範

(1)檔案以.sh結尾;

(2)檔案頭為:#!/bin/bash (表示使用的是bash shell);

(3)以#開頭為註釋;

(4)輸出: echo "輸出內容";

(5)讀取:read -p "自定義讀取提示" name   (name為讀取內容設定的變數名,也可設定多個變數名,以空格分隔,在讀取內容時也會以空格分隔內容並分配到相應的變數名)

2、變數

(1)變數的建立級賦值

變數名=變數值

變數名不用宣告型別,由字母、數字和下劃線組成,但不能以數字開頭;預設的大寫變數名錶示系統變數,小寫表示普通變數;

變數值可以為字元、數字和命令,當變數值為命令時需用反單引號(即esc下邊的鍵)包圍起來;

例:w=1`ls -l`

(2)變數值的輸出($)

需在變數前加上$符號,當使用echo加單引號時輸出的只是純文字,而不會將變數的值提取出來,想要得到變數的值,只能使用雙引號將變數包圍;

顯示所有使用者自定的變數用命令:set

顯示所有的系統變數用命令:env

(3)從程式外部給程式傳遞引數

可在程式內部加上$1,表示從外部傳程式序的第一個引數;同理$2表示第二個引數,外部的多個引數之間以空格分隔。

例:給程式a.sh傳入ab,22兩個引數,使用命令:a.sh ab 22

$0表示程式自身,$#表示所有輸入引數的個數,$@表示所有的引數。

如果不是很明瞭可參考python中的sys.argv,機理基本一樣 http://www.cnblogs.com/aland-1415/p/6613449.html

3、重定向(>,>>)

即通過命令將結果輸入到檔案中

例:ls -l >name.txt

如果檔案不存在將會建立檔案,如果檔案存在,使用“>”時將會對檔案進行覆蓋重寫,使用“>>”將會在檔案的末尾進行追加寫入。

也可以在>或>>前加上1或2,注意不要與>,>>之間有空格,其中1表示正確的命令,2表示錯誤的命令。

 

二、運算子和常用判斷

1、比較運算子

等於:==

不等於:!=

大於:>或-gt

小於:<或-lt

大於等於:>=或-ge

小於等於:<=或-le

在使用(( ))中的條件中只能使用>等符號而不能使用-gt,在shell中(( ))和[]在一定程度上是等價的。

2、邏輯運算子

邏輯與:-a

邏輯或:-o

邏輯非:!

3、常用判斷

-r 檔名:檔案是否存在且可讀

-w 檔名:檔案是否存在且可寫

-x 檔名:檔案是否存在且可執行

-f 檔名:判斷檔案是否存在且是普通檔案

-d 檔名:檔案是否存在且是目錄

-e 檔名:檔案是否存在

-z 變數:判斷字串長度是否等於0

-n 變數:字串長度是否不等於0

 

在需加[]的條件判斷中,如果在-r等前邊加上test則不用加[];

 

 

三、程式結構

1、分支(if語句)

(1)基本格式:

if [ 條件 ]

then

語句1

else

語句2

fi

注意:每個[ ] 左右兩端都需要有空格,條件語句中如果包含變數則需要用雙引號包圍。

then也可以寫在條件之後,不過要在條件之後加上分號。

(2)多個條件連線格式:

if [ condition1 ] ;then

sentence1

elif [ condition2 ] ;then

sentence2

elif [ condition3 ] ;then

sentence3

else

sentence4

fi

(3)case選擇

使用格式:

case $變數名 in

"值1")

語句1;;

"值2")

語句2;;

...

*)

語句n

esac

 

其中;;表示語句結束,*)表示上邊所有結果都不符合的最後選擇;

值也可以用區間,但最多隻能用0-9的數字。

 

 

 

2、迴圈

(1)while迴圈

格式

while [ 條件 ]

do

語句

done

 

常用迴圈變數變化寫法:

((i++))

((i+=1)

let i=i+1

i=$(($i+1))

i=$ [ $i+1 ]

常用運算迭代寫法:

((sum=$sum+$i))

sum=$[$sum+$i]

sum=$(($sum+$i))

 

(2)for 迴圈

for 迭代子

do

語句

done

 

for迴圈常用迭代子的寫法:

((i=1;i<=10;i++))

i in 1 2 3 4 5 6

i in `seq 1  2  15`  #1和15表示起始點,2表示步長

 

四、函式

函式構造

函式名(){

內容

}

 

函式呼叫直接用函式名即可。

 

相關文章