gpt4 book ai didi

Bash 脚本 - 如何在使用 getopts 时逐行读取文件

转载 作者:行者123 更新时间:2023-11-29 09:12:53 26 4
gpt4 key购买 nike

我想在这个脚本中做两件事:1)将文件名传递给脚本2) 将选项传递给脚本

示例 1:$./test_script.sh file_name_to_be_read仅将文件名传递给脚本

示例 2:$./test_script.sh -a -b file_name_to_be_read将文件名和选项传递给脚本

我可以使用以下代码使示例 1 正常工作:

while read -r line ; do
echo $line
done

在示例 2 中,我想添加额外的标志,如下所示:

while getopts "abc opt; do
case "$opt" in
a) a=1
echo "a is enabled"
;;
b) b=1
echo "b is enabled"
;;
esac
done

但是我如何才能使 file_name 成为强制性的,并在有或没有选项的情况下使用?

最佳答案

getopts 只解析选项(以-开头的参数);其他论点不理会。参数 OPTIND 告诉您尚未查看的第一个参数的索引;通常你会放弃之前的选项。

while getopts "ab" opt; do
case "$opt" in
a) a=1
echo "a is enabled"
;;
b) b=1
echo "b is enabled"
;;
esac
done

shift $((OPTIND - 1))

echo "$# arguments remaining"
for arg in "$@"; do
echo "$arg"
done

如果以 bash tmp.bash -a -b c d e 的形式调用,则生成

$ bash tmp.bash -a -b c d e
a is enabled
b is enabled
3 arguments remaining:
c
d
e

关于Bash 脚本 - 如何在使用 getopts 时逐行读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275719/

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