• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Bash 程式設計教學與範例:讀取命令列參數數量與內容

介紹如何在 Bash 指令稿中透過 $#、$*、$@、$1、$2、$3 等特殊變數取得命令列的參數個數與內容。


在一般的程式語言中,都可以透過 argc 與 argv 這類的特殊變數來取得命令列中指定的參數個數與內容,而在 Bash 指令稿中對應的特殊變數則為 $#、$* 與 $@,以下是這些變數的使用方式。

$# 取得命令列參數個數

在 Bash 中對應 argc 的變數為 $#,以下是使用範例:

#!/bin/bash
# 命令列參數個數(對應 argc)
echo "參數個數:$#"

假設此指令稿名稱為 script.sh,則實際執行的狀況如下:

bash script.sh dog cat
參數個數:2

檢查命令列參數個數

實務上在指令稿的開頭會先檢查參數的數量是否正確,若參數的數量有誤,則顯示錯誤訊息以及使用說明等資訊,以下是一個簡單的範例:

#!/bin/bash
# 設定命令列參數個數
ARG_NUM=2

# 檢查參數個數
if [ $# -ne $ARG_NUM ]; then
  echo "參數個數錯誤:$#"
  echo "參數個數應為:$ARG_NUM"
  exit 1
fi

echo "參數個數正確,執行後續動作..."

假設此指令稿名稱為 argnum.sh,則實際執行的狀況如下:

bash argnum.sh dog
參數個數錯誤:1
參數個數應為 2
bash argnum.sh dog cat
參數個數正確,執行後續動作...

$* 與 $@ 取得命令列參數內容

若需要取得執行 Bash 指令稿時所指定的參數內容,可以透過 $* 或 $@ 變數,這兩個變數都可以用來取得各個參數的內容,但有一些差異:

  • $*:單一字串,由所有參數以空白串接而成。
  • $@:陣列,包含所有參數。
$* 在串接各個參數時,事實上是以 $IFS 變數的第一個字元作為分隔字元,而 $IFS 變數的預設值是空白字元。

由於 $* 是將所有參數串接成一個字串,當參數內容包含空白時,可能會造成參數內容的混淆,因此通常建議是使用 $@ 來取用各個參數。

#!/bin/bash
# 逐一處理各參數
for a in "$@"; do
  echo "<$a>";
done

假設此指令稿名稱為 arg.sh,則實際執行的狀況如下:

bash script.sh dog cat bird fish
<dog>
<cat>
<bird>
<fish>

若參數內容包含空白,以 $@ 的方式也能正確處理:

bash script.sh dog "cat bird" fish
<dog>
<cat bird>
<fish>

$1、$2、$3… 取得命令列參數內容

Bash 的 $1、$2、$3 這些特殊數字變數可以用來直接取得指定參數的內容,以下是使用範例:

#!/bin/bash
echo "第 1 個參數:$1"
echo "第 2 個參數:$2"
echo "第 3 個參數:$3"

假設此指令稿名稱為 arg2.sh,則實際執行的狀況如下:

bash script.sh dog cat bird
第 1 個參數:dog
第 2 個參數:cat
第 3 個參數:bird

while 逐一處理各參數

若要逐一處理各個參數,除了使用 for 迴圈之外,亦可使用 while 迴圈搭配 shift,每處理完第一個參數後,將處理完的第一個參數移除,直到所有參數都處理完為止:

#!/bin/bash
# 逐一處理各參數
while [ $# != 0 ]; do
  echo "<$1>"; # 印出目前的第一個參數
  shift        # 將目前的第一個參數移除
done

這個 while 版本的指令稿執行的結果跟 for 版本相同。

分類:Linux 標籤:Bash

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide