在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    1834

    瀏覽量

    32224
  • 腳本
    +關注

    關注

    1

    文章

    389

    瀏覽量

    14866
  • Bash
    +關注

    關注

    0

    文章

    57

    瀏覽量

    10184
收藏 人收藏

    評論

    相關推薦

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

    bash shell -e參數的含義與用途,你了解嗎?
    的頭像 發表于 07-28 05:20 ?1836次閱讀
    【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 ?2112次閱讀
    如<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 ?1204次閱讀
    【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 ?1200次閱讀
    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 ?1846次閱讀

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

    ? 由于腳本案例太多,在此僅展示部分,完整版領取方式請見文末 ? ? ? 249個拿來即用的shell腳本! ? 這249個Shell腳本
    的頭像 發表于 07-07 10:52 ?1185次閱讀
    分享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 ?626次閱讀
    <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 ?1107次閱讀

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

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

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

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

    shell并行調用腳本

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

    Shell腳本檢查工具ShellCheck介紹

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

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

    執行Shell腳本的方式有很多種,以下是一些常見的方法: 直接運行腳本文件 在命令行,可以直接使用腳本文件的路徑來運行
    的頭像 發表于 08-30 15:17 ?335次閱讀
    主站蜘蛛池模板: 午夜精品网站| 国产午夜在线观看视频| 操美女的视频网站| yy肉戏多纯黄的小说| 欧美成人 一区二区三区 | 亚洲一级色片| 欧美肥妇性| 色在线网站免费观看| 波多野结衣在线网址| 99香蕉精品视频在线观看| 亚洲成人激情片| 国产福利资源在线| 日本天天操| 色网站在线视频| 永久在线免费| 亚洲 欧洲 日产 韩国在线| 日本最新免费网站| 天天艹| av免费网站在线观看| 国产一级做a爰片久久毛片| xxxxxxxxx18免费视频| 天堂精品视频| 午夜视频精品| 狠狠一区| 高清国产下药迷倒美女| 91av视频| 久久综合社区| 999久久久国产精品| 日日噜噜噜夜夜爽爽狠狠 | 91综合在线视频| 欧美性xxxxbbbb| 九九久久九九久久| 天堂中文在线资源| 天天毛片| 亚洲人成电影在线小说网色| ww.色| 乱色伦短篇小说| 国产成人黄网址在线视频| 岛国大片在线播放| 久久青| h在线观看免费|