本文摘要

本文主要介紹

Linux Shell

程式設計的基礎知識,包含下面

8 個方面

Shell 程式設計概述

Shell 關鍵字

Shell 變數

Shell 運算

Shell 語句

Shell 函式

Shell 除錯

Shell 易錯點

下面一一介紹。

Shell 程式設計概述

在 Linux 下有一門指令碼語言叫做:

Shell 指令碼

,這個指令碼語言可以幫助我們簡化很多工作,例如編寫自定義命令等,所以還是很有必要學習它的基本用法的,一個簡單的

hello。sh

指令碼像下面這樣,

第一行

#!/bin/bash

標識該 Shell 指令碼由哪個 Shell 解釋

#!/bin/bash

echo “Hello World!”

賦予許可權才可以執行

# 賦予可執行許可權

chmod a+x hello。sh

# 執行

。/hello。sh

# 結果

Hello World!

Shell 的編寫流程:

1。 編寫 Shell 指令碼

2。 賦予可執行許可權

3。 執行,除錯

下面來介紹具體的語法。

Shell 關鍵字

常用的關鍵字如下:

1。 echo:列印文字到螢幕

2。 exec:執行另一個 Shell 指令碼

3。 read:讀標準輸入

4。 expr:對整數型變數進行算術運算

5。 test:用於測試變數是否相等、 是否為空、檔案型別等

6。 exit:退出

看個例子:

#!/bin/bash

echo “Hello Shell”

# 讀入變數

read VAR

echo “VAR is $VAR”

# 計算變數

expr $VAR - 5

# 測試字串

test “Hello”=“HelloWorld”

# 測試整數

test $VAR -eq 10

# 測試目錄

test -d 。/Android

# 執行其他 Shell 指令碼

exec 。/othershell。sh

# 退出

exit

執行前,你需要新建一個

othershell。sh

的檔案,讓它輸出

I‘m othershell

,並且中途需要一次輸入,我這裡輸入的是 10:

Hello Shell

10

VAR is 10

5

I’m othershell

學習任何一門語言都要了解它的變數定義方法,Shell 也不例外。

Shell 變數

Shell 變數分為 3 種:

1。 使用者自定義變數

2。 預定義變數

3。 環境變數

定義變數需要注意下面 2 點:

1。 等號前後不要有空格:

NUM=10

2。 一般變數名用大寫:

M=1

使用

$VAR

呼叫變數:

echo $VAR

1。 使用者自定義變數

這種變數

只支援字串型別

,不支援其他字元,浮點等型別,常見有這 3 個字首:

1。

unset

:刪除變數

2。

readonly

:標記只讀變數

3。

export

:指定全域性變數

一個例子:

#!/bin/bash

# 定義普通變數

CITY=SHENZHEN

# 定義全域性變數

export NAME=cdeveloper

# 定義只讀變數

readonly AGE=21

# 列印變數的值

echo $CITY

echo $NAME

echo $AGE

# 刪除 CITY 變數

unset CITY

# 不會輸出 SHENZHEN

echo $CITY

執行結果:

SHENZHEN

cdeveloper

21

2。 預定義變數

預定義變數常用來獲取命令列的輸入

,有下面這些:

$0 :指令碼檔名

$1-9 :第 1-9 個命令列引數名

$# :命令列引數個數

$@ :所有命令列引數

$* :所有命令列引數

$? :前一個命令的退出狀態,

可用於獲取函式返回值

$$ :執行的程序 ID

一個例子:

#!/bin/bash

echo “print $”

echo “\$0 = $0”

echo “\$1 = $1”

echo “\$2 = $2”

echo “\$# = $#”

echo “\$@ = $@”

echo “\$* = $*”

echo “\$$ = $$”

echo “\$? = $?”

執行

。/hello。sh 1 2 3 4 5

的結果:

print $

# 程式名

$0 = 。/hello。sh

# 第一個引數

$1 = 1

# 第二個引數

$2 = 2

# 一共有 5 個引數

$# = 5

# 打印出所有引數

$@ = 1 2 3 4 5

# 打印出所有引數

$* = 1 2 3 4 5

# 程序 ID

$$ = 9450

# 之前沒有執行其他命令或者函式

$? = 0

3。 環境變數

環境變數預設就存在,常用的有下面這幾個:

1。 HOME:使用者主目錄

2。 PATH:系統環境變數 PATH

3。 TERM:當前終端

4。 UID:當前使用者 ID

5。 PWD:當前工作目錄,絕對路徑

還是看例子:

#!/bin/bash

echo “print env”

echo $HOME

echo $PATH

echo $TERM

echo $PWD

echo $UID

執行結果:

print env

# 當前主目錄

/home/orange

# PATH 環境變數

/home/orange/anaconda2/bin:後面還有很多

# 當前終端

xterm-256color

# 當前目錄

/home/orange

# 使用者 ID

1000

Shell 變數就介紹到這裡,下面來介紹 Shell 的變數運算。

Shell 運算

我們經常需要在 Shell 指令碼中計算,掌握基本的運算方法很有必要,下面就是 4 種比較常見的運算方法,功能都是將 m + 1:

1。 m=$[ m + 1 ]

2。 m=

expr $m + 1

# 用 “ 字元包起來

3。 let m=m+1

4。 m=$(( m + 1 ))

來看一個實際的例子:

#!/bin/bash

m=1

m=$[ m + 1 ]

echo $m

m=`expr $m + 1`

echo $m

# 注意:+ 號左右不要加空格

let m=m+1

echo $m

m=$(( m + 1 ))

echo $m

執行結果:

2

3

4

5

瞭解了基本的運算方法,下面進一步來學習 Shell 的語句。

Shell 語句

Shell 語句跟高階語言有些類似,也包括分支,跳轉,迴圈,下面就帶著大家一個一個突破。

1。 if 語句

這個跟高階語言的

if - else - if

類似,只是格式有些不同而已,也來看個例子吧:

#!/bin/bash

read VAR

# 下面這兩種判斷方法都可以,使用 [] 注意左右加空格

#if test $VAR -eq 10

if [ $VART -eq 10 ]

then

echo “true”

else

echo “false”

fi

2。 case 語句

case 語句有些複雜,要注意格式:

#!/bin/bash

read NAME

# 格式有點複雜,一定要注意

case $NAME in

“Linux”)

echo “Linux”

;;

“cdeveloper”)

echo “cdeveloper”

;;

*)

echo “other”

;;

esac

執行結果:

# 輸入 Linux

Linux

Linux

# 輸入 cdeveloper

cdeveloper

cdeveloper

# 輸入其他的字串

hello

other

3。 for 迴圈

這是一個 for 迴圈基本使用例子,挺簡單的,有點類似 Python:

#!/bin/bash

# 普通 for 迴圈

for ((i = 1; i <= 3; i++))

do

echo $i

done

# VAR 依次代表每個元素

for VAR in 1 2 3

do

echo $VAR

done

執行結果:

1

2

3

4。 while 迴圈

注意與 for 迴圈的區別:

#!/bin/bash

VAR=1

# 如果 VAR 小於 10,就打印出來

while [ $VAR -lt 10 ]

do

echo $VAR

# VAR 自增 1

VAR=$[ $VAR + 1 ]

done

執行結果:

1

2

3

4

5

6

7

8

9

5。 until 迴圈

until 語句與上面的迴圈的

不同點是它的結束條件為 1

#!/bin/bash

i=0

# i 大於 5 時,迴圈結束

until [[ “$i” -gt 5 ]]

do

echo $i

i=$[ $i + 1 ]

done

6。 break

Shell 中的

break

用法與高階語言相同,都是

跳出迴圈

,來看個例子:

#!/bin/bash

for VAR in 1 2 3

do

# 如何 VAR 等於 2 就跳出迴圈

if [ $VAR -eq 2 ]

then

break

fi

echo $VAR

done

執行結果:

1

7。 continue

continue

用來

跳過本次迴圈

,進入下一次迴圈,再來看看上面的例子:

#!/bin/bash

for VAR in 1 2 3

do

# 如果 VAR 等於 2,就跳過,直接進入下一次 VAR = 3 的迴圈

if [ $VAR -eq 2 ]

then

continue

fi

echo $VAR

done

執行結果:

1

3

下面介紹 Shell 程式設計中比較重要的函式,好像每種程式語言的函式都很重要。

Shell 函式

函式可以用一句話解釋:

帶有輸入輸出的具有一定功能的黑盒子

,相信有過程式設計經驗的同學不會陌生。那麼,我們先來看看 Shell 中函式定義的格式。

1。 定義函式

有 2 種常見格式:

function fun_name()

{

}

fun_name()

{

}

例如:

#!/bin/bash

function hello_world()

{

echo “hello world fun”

echo $1 $2

return 1

}

hello()

{

echo “hello fun”

}

2。 呼叫函式

如何呼叫上面的 2 個函式呢?

# 1。 直接用函式名呼叫 hello 函式

hello

# 2。 使用「函式名 函式引數」來傳遞引數

hello_world 1 2

# 3。 使用「FUN=`函式名 函式引數`」 來間接呼叫

FUN=`hello_world 1 2`

echo $FUN

3。 獲取返回值

如何獲取

hello_world

函式的返回值呢?還記得

$?

嗎?

hello_world 1 2

# $? 可用於獲取前一個函式的返回值,這裡結果是 1

echo $?

4。 定義本地變數

使用

local

來在函式中定義本地變數:

fun()

{

local x=1

echo $x

}

俗話說,

程式 3 分靠寫,7 分靠調

,下面我們就來看看如何除錯 Shell 程式。

Shell 除錯

使用下面的命令來

檢查是否有語法錯誤

sh -n script_name。sh

使用下面的命令來

執行並除錯 Shell 指令碼

sh -x script_name。sh

來看個實際的例子,我們來除錯下面這個

test。sh

程式:

#!/bin/bash

for VAR in 1 2 3

do

if [ $VAR -eq 2 ]

then

continue

fi

echo $VAR

done

首先檢查有無語法錯誤:

sh -n test。sh

沒有輸出,說明沒有錯誤,開始實際除錯:

sh -x test。sh

除錯結果如下:

+ [ 1 -eq 2 ]

+ echo 1

1

+ [ 2 -eq 2 ]

+ continue

+ [ 3 -eq 2 ]

+ echo 3

3

其中

帶有

+

表示的是

Shell

偵錯程式的輸出

不帶

+

表示我們程式的輸出

Shell 易錯點

這裡我總結了一些初學 Shell 程式設計容易犯的錯誤,大多都是語法錯誤:

1。

[]

內不能巢狀

()

,可以巢狀

[]

2。

$[ val + 1 ]

是變數加 1 的常用方法

3。

[]

在測試或者計算中裡面的內容最好

都加空格

4。 單引號和雙引號差不多,單引號更加嚴格,雙引號可以巢狀單引號

5。 一定要注意語句的格式,例如縮排

總結

這裡面的內容淺顯易懂,很適合剛剛入門的新手。我覺得很不錯,希望能幫到大家。

參考連結:

技術乾貨:Linux Shell 程式設計基礎,看這一篇就夠了!