【问题标题】:Bash getopts option with anotherBash getopts 选项与另一个
【发布时间】:2021-06-23 15:42:02
【问题描述】:

我当前的 Bash 脚本如下所示。到目前为止它正在工作,除了我不知道如何制作它,所以两个选项 -f 和 -o 一起工作:

  • -o FILE 选项显示最相关的信息 在作为参数传递的文件中(如果文件不存在,则必须显示错误消息)
  • 选项 -f KEYWORD 显示包含 KEYWORD 的行 从一个文件。此选项必须与 -o 选项一起使用

感谢您的意见

    #!/bin/bash
    function s_func()
{

filename="$1";

echo "when you're done saving information please write 'exit'"  
        script $filename.txt

}
function o_func()
{

filename="$1"
dest='/home/eya/'

if [ -f "$filename".txt ]; then
cat $filename.txt
else echo "file does not exist"
fi
}

function f_func()
{
keyword="$1"
filename="$2"
grep $keyword $filename.txt
}
    while getopts ":s:o:f:" opt; do
        case $opt in 
            s) s_func  "$OPTARG";;
            o) o_func  "$OPTARG";;
            f) f_func  "$OPTARG";;
            \?)echo "wrong option";exit 1;;
        esac
        done
    shift $((OPTIND -1))

【问题讨论】:

  • 你之前没有发布过这段代码(我不会说“问这个问题”,因为这更像是代码转储而不是当前状态下的问题)?跨度>
  • 请尝试将您的代码转换为minimal reproducible example——最短的代码,在不更改运行时演示特定问题。 (同样,预期和实际输出都应显示在问题本身中)。
  • 顺便说一句,注意您如何在一个地方使用filename,而在另一个地方使用file?如果你让f_func 写入一个全局变量(默认情况下,所有变量在 bash 中都是全局的),并且s_func 那个全局变量中读取......好吧,你就在那里(只要因为它们按预期顺序使用)。

标签: bash getopts


【解决方案1】:

试试这个:在处理命令行选项时,只收集变量。 仅在解析选项之后对这些变量执行操作。

declare f_arg o_arg s_arg

while getopts ":s:o:f:" opt; do
    case $opt in 
        s) s_arg=$OPTARG ;;
        o) o_arg=$OPTARG ;;
        f) f_arg=$OPTARG ;;
    esac
done
shift $((OPTIND -1))

if [[ -z $o_arg ]] || [[ -z $f_arg ]] || [[ -z $s_arg ]]; then
    echo "ERROR: Options -s, -o and -f are required." >&2
    exit 1
fi

# Now you can do stuff in a specific order.
o_func "$o_arg"
f_func "$f_arg"
s_func "$s_arg"

【讨论】:

  • 非常感谢,但我有一个小问题,我该怎么做,所以 -f 选项只使用关键字进行搜索,而 -o 选项是现在显示原因的选项当我一起使用它们时,它会显示整个文件,然后显示我搜索的内容
  • 我不明白你的意思。在“o”函数中做cat $filename有问题吗?
  • ./ex.sh -f 关键字 -o 文件的输出应该只显示带有关键字的行但是当它现在显示整个文档时,然后带有关键字的行“选项 -f KEYWORD显示包含文件的关键字的行。此选项必须与 -o 选项一起使用“再次感谢您的宝贵时间
  • 好吧,这种行为取决于你,程序员。我不知道你要我为你做什么。
猜你喜欢
  • 2015-07-16
  • 1970-01-01
  • 2013-04-17
  • 2012-07-02
  • 2018-09-30
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多