天天看點

軟體開發 | Bash 基礎知識系列 #3:傳遞參數和接受使用者輸入

作者:硬核老王
軟體開發 | Bash 基礎知識系列 #3:傳遞參數和接受使用者輸入
在 Bash 基礎系列的這一章中,學習如何向 Bash 腳本傳遞參數并使它們具有互動性。

來讓 Bash 腳本有參數吧 😉

你可以通過向 Bash 腳本傳遞變量來使其更加有用和更具互動性。

讓我通過示例詳細向你展示這一點。

将參數傳遞給 Shell 腳本

當你運作 Shell 腳本時,你可以按以下方式向其中添加其他變量:

./my_script.sh var1 var2
           

在腳本内部,你可以使用

$1

作為第一個參數,

$2

作為第二個參數,依此類推。

💡

$0

是一個特殊變量,儲存正在執行的腳本的名稱。

讓我們通過一個實際的例子來看看。切換到儲存練習 Bash 腳本的目錄。

mkdir -p bash_scripts && cd bash_scripts
           

現在,建立一個名為

arguments.sh

(我想不出更好的名稱)的新 Shell 腳本,并向其中添加以下行:

#!/bin/bash

echo "Script name is: $0"
echo "First argument is: $1"
echo "Second argument is: $2"
           

儲存檔案并使其可執行。現在像往常一樣運作腳本,但這次向其中添加任意兩個字元串。你将看到螢幕上列印的詳細資訊。

🚧 參數由空格(空格、制表符)分隔。如果參數中有空格,請使用(英文)雙引号将其引起來,否則它将被視為單獨的參數。
軟體開發 | Bash 基礎知識系列 #3:傳遞參數和接受使用者輸入
💡 Bash 腳本最多支援 255 個參數。但對于參數 10 及以上,你必須使用花括号

${10}

${11}

...

${n}

正如你所看到的,

$0

代表腳本名稱,而其餘參數存儲在編号變量中。你還可以在腳本中使用一些其他特殊變量。

特殊變量 變量描述

$0

腳本名稱

$1

$2

、……

$9

腳本參數

${n}

腳本參數從 10 到 255

$#

參數數量

$@

所有參數

$

目前 Shell 的程序 ID

$!

最後執行的指令的程序 ID

$?

最後執行指令的退出狀态
🏋️‍♀️ 修改上面的腳本以顯示參數數量。

如果參數數量不比對怎麼辦?

在上面的示例中,你為 Bash 腳本提供了兩個參數并在腳本中使用了它們。

但是,如果你隻提供一個參數或三個參數怎麼辦?

讓我們實際做一下吧。

軟體開發 | Bash 基礎知識系列 #3:傳遞參數和接受使用者輸入

正如你在上面所看到的,當你提供的參數超出預期時,結果仍然是一樣的。不使用其他參數,是以不會産生問題。

但是,當你提供的參數少于預期時,腳本将顯示空白。如果腳本的一部分依賴于缺少的參數,這可能會出現問題。

接受使用者輸入并制作互動式 Bash 腳本

你還可以建立提示使用者通過鍵盤提供輸入的 Bash 腳本。這使你的腳本具有互動性。

read

指令提供了此功能。你可以這樣使用它:

echo "Enter something"
read var
           

上面的

echo

指令不是必需的,但最終使用者不會知道他們必須提供輸入。然後使用者在按Enter鍵之前輸入的所有内容都存儲在

var

變量中。

你還可以顯示提示消息并在單行中擷取值,如下所示:

read -p "Enter something? " var
           

讓我們看看它的實際效果。建立一個新的

interactive.sh

Shell 腳本,内容如下:

#!/bin/bash

echo "What is your name, stranger?"
read name
read -p "What's your full name, $name? " full_name
echo "Welcome, $full_name"
           

在上面的示例中,我使用

name

變量來擷取名稱。然後我在提示中使用

name

變量,并在

full_name

變量中擷取使用者輸入。我使用了兩種使用

read

指令的方法。

現在,如果你授予執行權限,然後運作此腳本,你會注意到該腳本顯示

What is your name, stranger?

,然後等待你從鍵盤輸入内容。你提供輸入,然後它會顯示

What's your full name

消息,并再次等待輸入。

以下是供你參考的示例輸出:

軟體開發 | Bash 基礎知識系列 #3:傳遞參數和接受使用者輸入

🏋️ 練習時間

是時候練習你所學到的東西了。嘗試為以下場景編寫簡單的 Bash 腳本。

練習 1:編寫一個帶有三個參數的腳本。你必須使腳本以相反的順序顯示參數。

預期輸出:

abhishek@itsfoss:~/bash_scripts$ ./reverse.sh ubuntu fedora arch
Arguments in reverse order:
arch fedora ubuntu
           

練習 2:編寫一個腳本,顯示傳遞給它的參數數量。

提示:使用特殊變量

$#

預期輸出:

abhishek@itsfoss:~/bash_scripts$ ./arguments.sh one and two and three
Total number of arguments: 5
           

練習 3:編寫一個腳本,将檔案名作為參數并顯示其行号。

提示:使用

wc

指令來計算行号。

你可以在社群中讨論你的解決方案。

很好! 現在你可以(傳遞)參數了 😃 在下一章中,你将學習在 Bash 中執行基本數學運算。

(題圖:MJ/5a75aa2f-1cb1-4009-a4e6-683cf61bc892)

via: https://itsfoss.com/bash-pass-arguments/

作者:Abhishek Prakash選題:lkxed譯者:geekpi校對:wxy

本文由 LCTT原創編譯,Linux中國榮譽推出

繼續閱讀