抖音资讯

douyinzx

bash命令详解(简单阐述bash命令的用法)

iseeyu2年前 (2024-05-06)抖音资讯112

给你的 shell 脚本添加选项。

终端命令通常具有 选项或开关,用户可以使用它们来修改命令的执行方式。关于命令行界面的POSIX 规范中就对选项做出了规范,这也是最早的 UNIX 应用程序建立的一个由来已久的惯例,因此你在创建自己的命令时,最好知道如何将选项包含进Bash 脚本中。

与大多数语言一样,有若干种方法可以解决 Bash 中解析选项的问题。但直到今天,我最喜欢的方法仍然是我从 Patrick Volkerding 的 Slackware 构建脚本中学到的方法,当我第一次发现 Linux 并敢于冒险探索操作系统所附带的纯文本文件时,这些脚本就是我的 shell 脚本的引路人。

 

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关键字会使所有参数位移一位,这样位置 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关键字,但参数需要位移两位而不是一位。

#!/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选项需要一个参数)。所有参数都位移两位:其中一位是跳过--config-c,另一位是跳过其参数。与上节一样,循环重复直到没有匹配的参数。

下面是新版脚本的测试:

$ 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 让选项解析变得简单

还有一些其他方法也可以解析 Bash 中的选项。你可以替换使用 case语句或getopt命令。无论使用什么方法,给你的用户提供选项都是应用程序的重要功能,而 Bash 让解析选项成为了一件简单的事。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/43931.html

相关文章

ipad忘记密码简单恢复不删除信息(ipad已停用解锁教程)

ipad忘记密码简单恢复不删除信息(ipad已停用解锁教程)

这东西时间久了不用就容易忘记密码,这不。。。。又忘记密码找我来解锁 说实话,我本人用苹果的产品比较少,一个是因为没钱,买不起,另外也是用安卓系统,windows系统习惯了 下面就开始把这个iPad的密码重置一下:  ...

自己微信直播回放怎么看(微信直播观历史记录查看)

自己微信直播回放怎么看(微信直播观历史记录查看)

今天来跟大家讲一下小程序直播回放、支持第三方推流设备发起直播等功能 在4月2日凌晨,微购儿小程序收到小程序直播组件新版本发布的通知,其中一项重磅更新正是“新增回放功能”。而此前(2月28日),微信就曾预告过这一新能力将在不久后与大家见面。 如今终于来了! 1、新增直播回放...

百度搜索开户多少钱?竞争对手在销售端如火如荼的进行时。

百度搜索开户多少钱?竞争对手在销售端如火如荼的进行时。

对于生活在2020年的人来说,通过互联网买卖蔬菜是很有学问的。任何一个城市的美丽和工厂的员工都要绞尽脑汁。百度广告账户开通流行期间,各类新鲜电子商务普遍增长了2-5倍,迅速占领了我们的生活。尤其是品多、滴滴、美团等大型互联网企业,已经将“便宜”作为标准配置。然而,对于消费者来说,你在购买的水果和蔬菜...

【巨宣网络】为您介绍房产行业在快手推广营销的策略

【巨宣网络】为您介绍房产行业在快手推广营销的策略

在浏览快手短视频的过程中,我们常常会看到各种行业、不同类型的广告,快手短视频也成为房产行业的广告主选择推广的重要平台,现在买房或者寻找办公场所的需求日益明显,因此很多中介或者开发商开启通过线上平台宣传,从而提升楼盘的知名度,那么对于房产行业在快手投放需要注意哪些内容呢?我们来一起了解! 一、房...

百度广告:信息流推广排除人群功能-新增同主体排除已转化用户方式小流量上线

百度广告:信息流推广排除人群功能-新增同主体排除已转化用户方式小流量上线

一、【项目背景】     基于对百度效果类广告的精准营销诉求,广告主根据用户的触达路径进行精细化营销已经成为普遍方式,对新触达用户和再次触达用户采用不同的营销推广方案成为效果广告投放中的常用场景,即广告主会对拉新场景(新客首次触达)和再营销场景(再次触达客户的激活、唤醒)设置不...

抖音浏览量是一人一个浏览量吗(抖音浏览量的计算方式)

抖音浏览量是一人一个浏览量吗(抖音浏览量的计算方式)

重复观看同一个抖音作品,播放量会不会累加呢?答案很明显:不会,只能算一个播放量!   当我们发布一个抖音作品后,特别希望在短时间内有大量的点赞、评论、播放量。那么,有些人会认为一直不停的播放不就行了,殊不知抖音作品浏览量的算法为一个账号只能算一个播放量。所以这种...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片