精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在bash shell腳本中接受參數

CHANBAEK ? 來源:TIAP ? 作者:GLIU ? 2022-12-09 17:34 ? 次閱讀

終端命令通常包含一些參數,在使用的時候可以提供不同的參數來確定命令的執行方式。POSIX規范中包含了用于命令行接口的選項。這也是與最早的UNIX應用程序建立的一個由來已久的約定,所以當你在寫bash腳本的時候,需要知道如何在腳本中接受參數。

bash中的參數(選項)解析

Bash中解析選項的策略是循環遍歷傳遞給shell腳本的所有參數,確定它們是不是選項,然后切換到下一個參數。重復此過程,直到沒有剩余選項。

從一個簡單的布爾選項(有時稱為開關或標志)開始:

#!/bin/bash


while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
else
    break
fi
done


echo $ALPHA

在這段代碼中,我創建了一個while循環,它作為一個無限循環,直到沒有更多的參數要處理為止。if語句嘗試將在第一個位置($1)找到的任何參數與--alpha或-a匹配(這些是沒有特殊意義的任意選項名稱。在實際腳本中,可以使用--verbose和-v來觸發詳細輸出)。

shift關鍵字使所有參數移位1,這樣位置2($2)中的參數將移動到位置1($1)。當沒有其他參數要處理時,將觸發else語句,這將中斷while循環。

在腳本的末尾,將$ALPHA的值打印到終端。

測試一下這個腳本:

$ bash ./test.sh --alpha
1
$ bash ./test.sh


$ bash ./test.sh -a
1

已正確檢測到該選項。

檢測Bash中的參數

但有一個問題:額外的參數被忽略。

$ bash ./test.sh --alpha foo
1
$

要捕獲不作為選項的參數,可以將剩余參數轉儲到Bash數組中。

#!/bin/bash


while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
else
    break
fi
done


echo $ALPHA


ARG=( "${@}" )
for i in ${ARG[@]}; do
    echo $i
done

測試一下修改后的腳本:

$ bash ./test.sh --alpha foo
1
foo
$ bash ./test.sh foo


foo
$ bash ./test.sh --alpha foo bar
1
foo
bar

帶參數的選項

有些選項本身需要一個參數。例如,您可能希望允許用戶設置圖形的顏色或分辨率等屬性,或者將應用程序指向自定義配置文件。

要在Bash中實現這一點,可以像使用布爾開關一樣使用shift關鍵字,但將參數移位2而不是1。

#!/bin/bash


while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
elif [ "$1" = "--config" -o "$1" = "-c" ]; then
    CONFIG=$2
    shift 2
else
    break
fi
done


echo $ALPHA
echo $CONFIG


ARG=( "${@}" )


for i in ${ARG[@]}; do
    echo $i
done

在這段代碼中,我添加了一個elif子句來將每個參數與--config和-c進行比較。在匹配的情況下,名為CONFIG的變量的值被設置為第二個參數的值(這意味著--CONFIG選項需要一個參數)。所有參數移位2:1移位--config或-c,1移位其參數。與往常一樣,循環會重復,直到沒有匹配的參數。

下面是對新版本腳本的測試:

$ bash ./test.sh --config my.conf foo bar
my.conf
foo
bar
$ bash ./test.sh -a --config my.conf baz
1
my.conf
baz

選項解析變得很容易

在Bash中還有其他解析選項的方法。您可以交替使用case語句或getopt命令。無論您選擇使用什么,用戶的選項都是任何應用程序的重要特性,Bash使其變得簡單。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 參數
    +關注

    關注

    11

    文章

    1791

    瀏覽量

    32110
  • 腳本
    +關注

    關注

    1

    文章

    387

    瀏覽量

    14834
  • Bash
    +關注

    關注

    0

    文章

    57

    瀏覽量

    10169
收藏 人收藏

    評論

    相關推薦

    【RT-Thread學習筆記】bash shell -e參數

    bash shell -e參數的含義與用途,你了解嗎?
    的頭像 發表于 07-28 05:20 ?1799次閱讀
    【RT-Thread學習筆記】<b class='flag-5'>bash</b> <b class='flag-5'>shell</b> -e<b class='flag-5'>參數</b>

    何在bash shell腳本中使用變量

    如果你使用編程語言編寫過程序,那么一定接觸過變量。而在 bash 腳本的編寫時,變量也是一個很重要的概念。今天我們分享一下如何在 bash 腳本
    發表于 12-02 16:32 ?2069次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b> <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>中使用變量

    何在 Shell 腳本執行語法檢查調試模式

    shell 腳本中發現有錯誤,shell 會在終端輸出錯誤,不然就不會顯示任何東西。激活語法檢查的命令如下:$ bash -n scri
    發表于 12-31 11:04

    高級Bash 腳本編程指南

    高級Bash 腳本編程指南
    發表于 10-26 08:33 ?7次下載
    高級<b class='flag-5'>Bash</b> <b class='flag-5'>腳本</b>編程指南

    【RT-Thread學習筆記】bash和dash-shell

    ? 最近在工作遇到一個很奇葩的問題,就是一個嵌入式的SDK編譯,它里面執行shell命令的時候,使用的dash shell來解析,而通常我們默認用的是bash
    的頭像 發表于 07-30 13:49 ?1180次閱讀
    【RT-Thread學習筆記】<b class='flag-5'>bash</b>和dash-<b class='flag-5'>shell</b>

    Raspberry Pi Bash Shell 腳本簡介

      拋開潛在的麻煩不談,Bash 可以是一個非常強大的工具,讓您可以自動執行各種任務。在即將發表的文章,我將展示如何使用 Bash 腳本以及一些硬件技巧來自動化我的 Raspberr
    的頭像 發表于 08-15 15:08 ?1162次閱讀
    Raspberry Pi <b class='flag-5'>Bash</b> <b class='flag-5'>Shell</b> <b class='flag-5'>腳本</b>簡介

    Bash腳本特殊變量$0是什么?

    Bash 腳本,`$0` 是一個特殊變量,它代表當前腳本的路徑和名稱。這個變量用于表示腳本自身,它是
    的頭像 發表于 05-12 14:41 ?1821次閱讀

    分享249個拿來即用的shell腳本

    ? 由于腳本案例太多,在此僅展示部分,完整版領取方式請見文末 ? ? ? 249個拿來即用的shell腳本! ? 這249個Shell腳本
    的頭像 發表于 07-07 10:52 ?1157次閱讀
    分享249個拿來即用的<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>

    BASH shell腳本篇—條件命令

    這篇文章介紹下BASH shell的條件相關的命令,包括:if, case, while, until, for, break, continue。
    的頭像 發表于 10-11 15:21 ?584次閱讀
    <b class='flag-5'>BASH</b> <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>篇—條件命令

    BASH shell腳本篇—函數

    函數是代碼重用的最重要方式。Bash函數可以定義為一組命令,在bash腳本多次調用。
    的頭像 發表于 10-20 16:31 ?1038次閱讀

    BASH shell腳本篇—文件處理介紹

    Bash Shell腳本,可以使用多種方法來對文件進行操作,包括讀取文件或寫入文件。
    的頭像 發表于 10-23 16:51 ?585次閱讀

    如何利用shell進行腳本程序的設計?

    利用Shell進行腳本程序的設計可以按照以下步驟進行: 選擇Shell解釋器:在Unix和Linux系統,通常會默認安裝一個或多個Shell
    的頭像 發表于 11-08 10:17 ?576次閱讀

    shell并行調用腳本

    Shell腳本,可以使用一些技巧來實現并行調用。以下是幾種常見的方法: 使用后臺進程:在Shell腳本
    的頭像 發表于 11-08 10:23 ?920次閱讀

    Shell腳本檢查工具ShellCheck介紹

    ShellCheck是一個用于bash/sh shell腳本的靜態分析工具,可以輔助檢查腳本語法錯誤,給出建議增強腳本健壯性。
    的頭像 發表于 12-27 13:43 ?2019次閱讀
    <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>檢查工具ShellCheck介紹

    執行shell腳本的方式包括什么

    執行Shell腳本的方式有很多種,以下是一些常見的方法: 直接運行腳本文件 在命令行,可以直接使用腳本文件的路徑來運行
    的頭像 發表于 08-30 15:17 ?274次閱讀