Shell指令碼學習之基礎程式結構

2021-07-03 21:05:46 字數 3027 閱讀 7208

shell指令碼:乙個由一堆命令堆砌而成的,用來完成特定任務的,可以被指定直譯器執行的,文字檔案。

這個是我對shell指令碼的理解。

1、shell指令碼就是乙個可執行文字檔案,它不需要編譯,不需要連線,寫完就可以直接執行;

2、shell指令碼的主體是一堆命令,每一條語句都可以再控制台下直接執行;

3、指定直譯器,這個就是每個shell指令碼的第一句話,是固定的,直譯器有多個,bash、cshell等等,所以需要指定下。

程式=最簡單的結構+語句+實現的思想。

最簡單的結構就相當於人的骨架,就是最簡單的乙個程式,可以堪稱所有程式的祖宗的就是它。

語句就相當於人的血肉,用來填充這個骨架。在我看來就四種:輸入、輸出、迴圈、判斷。

實現思想就相當於人的靈魂,需要實現的功能都在此體現。

最簡單的結構,那就是最簡單的程式

#!/bin/bash

exit 0

這個shell什麼也沒有做,就退出了,但它確實是最簡單的shell指令碼,他是符合語法規則的。

第一行指定了這個指令碼是由bash來解釋執行的。

第二行退出當前指令碼。

shell的執行有兩種方式:

乙個是./指令碼名.sh 的方式執行,這種執行方式是新開乙個bash來執行該指令碼,類似與子程序的方式執行,所以指令碼中的任何變數在指令碼退出後都會被銷毀,不會在父程序中留下任何痕跡。

乙個是source 指令碼名.sh方式執行,這種方式,不再開子程序執行,指令碼中的所有變數都會影響到當前的bash,即指令碼執行完成後,在當前命令列可以檢視指令碼中的變數(如果指令碼沒有取消(unset)變數的話)

語句輸入:

shell指令碼的輸入和c語言的輸入一樣,乙個是從外部讀取的,乙個是命令本身的。

從外部讀取的,就是用read命令從使用者的輸入讀取的資料,與c語言的scanf類似。

#!/bin/bash

read -p "please enter a number:" iinputnum

exit 0

這個程式就是提示使用者輸入乙個數字,然後讀取使用者的輸入。

這裡有輸入,自然要儲存,所以要定義變數來儲存。shell指令碼的變數定義算是我見過的最隨意的了。沒有型別,隨時定義,隨時使用。

隨便寫個字串,他就是乙個變數,可以是乙個數字,可以是乙個字串,也可以是乙個命令的執行結果,都行。

命令本身的輸入,就是指在執行的命令後面帶引數,類似與c語言的 int argc和char *argv。shell指令碼提供同樣的功能,這個是shell指令碼的預設變數

$0:代表命令本身

$1:代表命令後的第乙個引數

$2:代表命令後的第二個引數

依次類推。

$#:代表引數的個數,不包括命令本身。

$@:表示輸出所有的引數,不包括命令本身。

輸出輸出也不需要控制輸出格式什麼的,只有乙個命令:echo。

#!/bin/bash

echo "hello world"

exit 0

這個程式輸出乙個最經典的一句話:「hello world」。

這個是輸出字串,如果要輸出變數,可以用下面的方式

echo $varname

以美元符號($)加變數名的方式輸出乙個變數。

迴圈迴圈分為三種:while迴圈、until迴圈、for迴圈

while迴圈格式:

while [判斷式]

do#程式段

done

當滿足判斷式的時候,就進入迴圈,迴圈的主體就是中間的程式段,以do開始,以done結束。

until迴圈格式:

until [判斷式]

do#程式段

done

如果判斷式成立,則停止迴圈。其餘與while迴圈類似。

for迴圈

for迴圈共有三種格式

1、適用於有限個,無規則的迴圈值

for 變數名 in 列舉值1 列舉值2 列舉值3  

do#程式段

done

1、變數名,不需要加美元符

2、可以列舉多個值,也可以式乙個列舉值包含多個資料,如「ls 」羅列出來的檔名,儲存在同乙個變數中,然後迴圈遍歷,此時只要寫乙個變數名即可

2、適用於依次增加,且每次增加值為1的情況

for 變數名 in $(seq 起始值 終止值)

do#程式段

done

seq是sequence的縮寫,有連續之意,所以程式會從起始值開始逐次加一

3、適用於有一定增加規律,每次增加的值相同,但是不等於一的情況

for ((初始值; 限制值; 執行步長))

do#程式段

done

從初始值開始每次增加步長,直至限制值

判斷判斷實際上常用的只有乙個if,但是有多種寫法

1、單個分支

if [條件判斷]; then

#處理fi

2、兩個分支

if [條件判斷]; then

#處理else

#處理fi

3、多個分支

if [條件判斷]; then

#處理elif [條件判斷]; then

#處理else

#處理fi

到此為止,shell指令碼的基本結構已經都知道了,理論上已經可以寫出任何的shell指令碼了!

骨架、血肉都已經齊活了,接下來只需要將對問題的解決方法用這些語句表達出來就行了。

一開始就說過,shell指令碼就是一堆命令的堆砌,在知曉語法邏輯結構後,接下來就是看個人的命令使用的熟練程度了,這就要看個人修煉了。

Shell指令碼程式設計基礎之shell指令碼退出狀態碼

exit 在指令碼中本身是退出的作用 根據程式執行的結果,返回對應的狀態碼,幫助實現條件判斷 21 15 48 root c8 3 55 grep q root etc passwd echo grep q admin etc passwd echo grep q root abc echo gre...

Shell指令碼程式設計基礎之shell指令碼條件測試命令

注意 表示式前後必須有空白字元 05 19 35 root c8 3 55 help test test test 表示式 對條件表示式進行估值。根據 expr 表示式的估值以狀態 0 真 或 1 偽 退出。表示式可以是一元或者二元的。一元表示式通常用於檢測 檔案狀態。同時還有字串操作符和數字比較操...

Shell 指令碼基礎學習 (一)

簡要介紹 shell基本上是乙個命令直譯器,類似於dos下的command.com。它接收使用者命令 如ls等 然後呼叫相應的應用程式。shell是作業系統最外面的一層。shell管理你與作業系統之間的互動 等待你輸入,互動式解釋和執行你輸入的命令或者自動地解釋和執行預先設定好的一連串的命令。she...