Linux Shell——bash shell 指令碼簡介

來源:互聯網
上載者:User

標籤:運行環境   linux   關鍵字   程式   單詞   

    

bash shell 指令碼簡介shell 運行環境

如果你啟動並執行是 Unix 或 Linux 系統,例如 Ubuntu,Red Hat,SUSE Linux,還有macOS,都是內建了 bash shell 的,所以你不需要額外配置所謂的開發環境。

我的 shell 環境是 macOS Sierra 版本,如果你用的是其他 Linux 系統,後面的例子基本上都是可以啟動並執行。

首先,開啟Terminal 命令列,先檢查下你的系統的 shell 版本:

echo $BASH_VERSION

bash 命令階層命令類型

bash shell 內建了一個type命令會根據你輸入的單詞來顯示此命令的類型,主要有以下五種類型:

  • 別名

  • 方法

  • shell 內建命令

  • 關鍵字

  • 檔案

例如,我們經常使用的cd命令,我們來執行下面的命令來看下它屬於哪種類型。

type cd

同時,為了查看更加詳細的資訊,可以使用

type -a cd

如果想查看的資訊更加簡潔和適合人們理解,可以使用如下命令和參數:

type -t ls

PATH 命令

Linux會檢查配置在 PATH 環境中的指定路徑的程式是否可以執行。通常情況下,目前的目錄是不會被尋找,除非你把它配置到PATH 中,我們可以執行如下命令,把目前的目錄加到 PATH 環境中。

export PATH=$PATH:.

接下來,我們建立一個存放 shell 指令碼的目錄bin,可以用如下命令來執行:

$ test -d $HOME/bin || mkdir $HOME/bin

當然你可以在你的主目錄下手動建立目錄 bin。上面的意思是檢查主目錄是否有 bin 目錄,沒有則建立。

建立指令碼

沒啥說的,學習每一種語言的第一個程式就是“Hello,World”,檔案名稱叫 hello1.sh。

#! /bin/bashecho "Hello World"exit 0

解釋一下:
#!/bin/bash:通常情況下,指令碼的預設第一行代碼就是它。“#!”又被成為shebang。它用來告訴系統的解譯器來執行指令碼。除了 bash,我們還可以PHP,Perl等其他指令碼。
echo "Hello World":echo 是一個內建的命令,用來表示標準輸出,類似於 Java 中的System.out.println()
exit 0:表示指令碼結束退出,exit有一個整型參數,0表示正常退出,非0表示指令碼執行中有錯誤。

執行指令碼

現在,我們來執行上面的指令碼,你可以在命令列下,進入到指令檔存在的目錄,也可以是在任意目錄下,但是,在執行的時候,檔案的路徑就應該為絕對路徑:

bash $HOME/bin/hello1.sh

執行結果為,列印出“Hello world”。

Tip
在執行上面的命令中,可能會報錯,提示許可權不足或訪問拒絕的錯誤。這是因為 hello1.sh 沒有執行的許可權。所以我們使用如下命令給檔案加上對應的許可權。
chmod +x $HOME/bin/hello1.sh

指令碼中的一些特殊參數

在指令碼中,有些表示特殊含義的參數,下面列出常見的幾個:

參數標識符 含義
$0 檔案本身的名字
$1 表示位置的參數,第一個參數傳遞給指令碼
${10} 在超過兩位元的參數時,使用大括弧限定起來
$# 參數的個數
$* 表示所有的參數

如下所示:

#! /bin/bashecho "file name $(basename $0)"echo "Hello $1"echo "Hello $*"echo "Args count: $#"exit 0

輸出的結果為:

重視引號的正確使用

到現在,我們使用了雙引號來包圍字串用於 echo 命令的輸出。
在第一個 Hello1.sh中,使用單引號還是雙引號,效果是一樣的。下面的兩行代碼是等效的。

echo "Hello World"echo ‘Hello World‘

但是,在包含有變數的引用時,單引號和雙引號的效果是不一樣的。

echo "Hello $1" // 列印傳遞的值,例如 Tim。echo ‘Hello $1‘ // 把$1原樣列印出來

所以,在有變數的字串裡,推薦使用雙引號。這時,$1就會被變數的值所替代,而不是作為字串顯示出來。

列印指令碼名字

前面提到過,特殊參數$0用來表示指令碼的名字,這裡的名字會帶有完整的路徑,如果我們只想要檔案名稱的話,可以使用以下代碼:

echo "You are using $(basename $0)"

這裡$(….)文法的作用是我們先執行括弧裡面的命令,然後然後把結果賦給外面不知名的變數。
$(….)文法還有一種相等的寫法,注意,是鍵盤上數字1左邊的按鍵,不是單引號。

echo "You are using `basename $0`"

個人不推薦這種寫法,太容易混淆,不容易差錯。

調試你的指令碼

如果想調試你的指令碼,bash給我們提供了兩個選項:-v 和-x。
如果我們想逐行詳細地查看指令碼的內容,可以使用-v 選項。

#! /bin/bashecho "file name $(basename $0)"echo "Hello $1"echo "Hello $*"echo "Args count: $#"exit 0

更常用的是-x 選項,它們在執行時顯示命令。當我們決定選擇分支的時候,更加使用。


可以看到,basename最先執行了,使用此選項不會看到代碼的詳情。


Linux Shell——bash shell 指令碼簡介

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.