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

    文章

    1398

    浏览量

    31482
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14643
  • Bash
    +关注

    关注

    0

    文章

    57

    浏览量

    10076
收藏 人收藏

    评论

    相关推荐

    【RT-Thread学习笔记】bash shell -e参数

    bash shell -e参数的含义与用途,你了解吗?
    的头像 发表于 07-28 05:20 1479次阅读
    【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 1675次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b> <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>中使用变量

    Shell脚本编程实验

    ,比较容易识别,led1.sh就知道是shell脚本程序)简单作如下说明:第一行代码:#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell,这里使用
    发表于 10-22 18:25

    何在 Shell 脚本执行语法检查调试模式

    shell 脚本中发现有错误,shell 会在终端输出错误,不然就不会显示任何东西。激活语法检查的命令如下:$ bash -n scri
    发表于 12-31 11:04

    如何更新Vivado 2014.2bash shell版本?

    如何更新Vivado 2014.2bash shell版本?谢谢!
    发表于 03-20 07:47

    高级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 shell来解析;我按
    的头像 发表于 07-30 13:49 981次阅读
    【RT-Thread学习笔记】<b class='flag-5'>bash</b>和dash-<b class='flag-5'>shell</b>

    Raspberry Pi Bash Shell 脚本简介

      抛开潜在的麻烦不谈,Bash 可以是一个非常强大的工具,让您可以自动执行各种任务。在即将发表的文章中,我将展示如何使用 Bash 脚本以及一些硬件技巧来自动化我的 Raspberry Pi 冷却风扇。
    的头像 发表于 08-15 15:08 908次阅读
    Raspberry Pi <b class='flag-5'>Bash</b> <b class='flag-5'>Shell</b> <b class='flag-5'>脚本</b>简介

    Bash脚本中特殊变量$0是什么?

    Bash 脚本中,`$0` 是一个特殊变量,它代表当前脚本的路径和名称。这个变量用于表示脚本自身,它是 Bash 环境中的一个重要组成部
    的头像 发表于 05-12 14:41 1524次阅读

    分享249个拿来即用的shell脚本

      由于脚本案例太多,在此仅展示部分,完整版领取方式请见文末       249个拿来即用的shell脚本!   这249个Shell脚本
    的头像 发表于 07-07 10:52 741次阅读
    分享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 322次阅读
    <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 357次阅读

    BASH shell脚本篇—文件处理介绍

    Bash Shell脚本中,可以使用多种方法来对文件进行操作,包括读取文件或写入文件。
    的头像 发表于 10-23 16:51 300次阅读

    如何利用shell进行脚本程序的设计?

    利用Shell进行脚本程序的设计可以按照以下步骤进行: 选择Shell解释器:在Unix和Linux系统中,通常会默认安装一个或多个Shell解释器,其中最常见且功能强大的是
    的头像 发表于 11-08 10:17 292次阅读

    Shell脚本检查工具ShellCheck介绍

    ShellCheck是一个用于bash/sh shell脚本的静态分析工具,可以辅助检查脚本语法错误,给出建议增强脚本健壮性。
    的头像 发表于 12-27 13:43 581次阅读
    <b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>检查工具ShellCheck介绍