Linux中國

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"

保存文件並使其可執行。現在像往常一樣運行腳本,但這次向其中添加任意兩個字元串。你將看到屏幕上列印的詳細信息。

? 參數由空格(空格、製表符)分隔。如果參數中有空格,請使用(英文)雙引號將其引起來,否則它將被視為單獨的參數。

Pass arguments to the bash scripting

? Bash 腳本最多支持 255 個參數。但對於參數 10 及以上,你必須使用花括弧 ${10}${11}...${n}

正如你所看到的,$0 代表腳本名稱,而其餘參數存儲在編號變數中。你還可以在腳本中使用一些其他特殊變數。

特殊變數 變數描述
$0 腳本名稱
$1$2、……$9 腳本參數
${n} 腳本參數從 10 到 255
$# 參數數量
$@ 所有參數
$$ 當前 Shell 的進程 ID
$! 最後執行的命令的進程 ID
$? 最後執行命令的退出狀態

?️‍♀️ 修改上面的腳本以顯示參數數量。

如果參數數量不匹配怎麼辦?

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

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

讓我們實際做一下吧。

Passing fewer or more arguments to bash script

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

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

接受用戶輸入並製作互動式 Bash 腳本

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

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

echo "Enter something"
read var

上面的 echo 命令不是必需的,但最終用戶不會知道他們必須提供輸入。然後用戶在按回車鍵之前輸入的所有內容都存儲在 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 消息,並再次等待輸入。

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

Interactive bash shell script

?️ 練習時間

是時候練習你所學到的東西了。嘗試為以下場景編寫簡單的 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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國