gpt4 book ai didi

bash - 如何创建带参数的 bash 脚本?

转载 作者:行者123 更新时间:2023-11-29 08:45:34 25 4
gpt4 key购买 nike

我已经知道 getopts,这很好,但令人讨厌的是,即使是强制参数,你也必须有一个标志。

理想情况下,我希望能够有一个脚本以这种形式接收参数:

script.sh [optional arguments] [anything required]

例如

script.sh -rvx output_file.txt

脚本说你必须有一个输出文件。有什么简单的方法可以做到这一点吗?

据我所知,对于 getopts,它必须看起来像:script.sh -rvx -f output_file.txt,这不是很干净。

必要时我也可以使用 python,但只有 2.4 可用,有点过时了。

最佳答案

不要使用内置的 getopts,而是使用 getopt(1)。它们(微妙地)不同并且擅长做不同的事情。对于您的场景,您可以这样做:

#!/bin/bash

eval set -- $(getopt -n $0 -o "-rvxl:" -- "$@")

declare r v x l
declare -a files
while [ $# -gt 0 ] ; do
case "$1" in
-r) r=1 ; shift ;;
-v) v=1 ; shift ;;
-x) x=1 ; shift ;;
-l) shift ; l="$1" ; shift ;;
--) shift ;;
-*) echo "bad option '$1'" ; exit 1 ;;
*) files=("${files[@]}" "$1") ; shift ;;
esac
done

if [ ${#files} -eq 0 ] ; then
echo output file required
exit 1
fi

[ ! -z "$r" ] && echo "r on"
[ ! -z "$v" ] && echo "v on"
[ ! -z "$x" ] && echo "x on"

[ ! -z "$l" ] && echo "l == $l"

echo "output file(s): ${files[@]}"

编辑:为了完整起见,我提供了一个处理需要参数的选项的示例。

关于bash - 如何创建带参数的 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4587076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com