BASH - 如果没有命令行参数作为参数传递,则抛出使用警告

时间:2017-02-28 07:09:13

标签: linux bash sh

我找到了一个答案here,用于计算传递给BASH脚本的参数数量的问题。我对行: ${1?"Usage: $0 ARGUMENT"}感兴趣,如果没有给出参数,它会抛出警告。

现在我想使用Usage调用一个使用函数: ${1?"Usage: $0 ARGUMENT"},但我不知道该怎么做。我尝试了: ${1?Usage}BASH在这一行引发了错误。有些人可以建议如何使用它来调用函数。

示例脚本如下,

#!/bin/bash

function Usage() {
    echo "Usage: $0 [-q] [-d]"
    echo ""
    echo "where:"
    echo "     -q: Query info"
    echo "     -d: delete info"
    echo ""
}

# Exit if no argument is passed in
: ${1?Usage}

while getopts "qd" opt; do
    case $opt in
        q)
            echo "Query info"
            ;;
        d)
            echo "Delete info"
            ;;
        *)
            Usage;
            exit 1
            ;;
    esac
done

2 个答案:

答案 0 :(得分:3)

这个怎么样?

foreach (...) {
    $datapump->ingest($data);
}
$datapump->endImportSession();

// reindex now!
foreach (['catalog_product_price', 'catalog_url', 'catalog_product_flat'] as $indexCode) {
    $process = Mage::getModel('index/indexer')->getProcessByCode($indexCode);
    $process->reindexAll();
}

无论如何,我认为这更具可读性:

function Usage() {
    echo "Usage: $0 [-q] [-d]"
    echo ""
    echo "where:"
    echo "     -q: Query info"
    echo "     -d: delete info"
    echo ""
}

# Exit if no argument is passed in
: ${1?"$(Usage)"}

另一个想法是像这样处理它:

if [ $# -lt 1 ] ; then
    Usage
fi

答案 1 :(得分:0)

你只需要将参数传递给bash脚本。 假设bash脚本的名称是hello.sh; 例如:

    #!/bin/bash
    # script's name is hello.sh
    : ${1?"Usage: $0 Argument"}
    echo hello,$1

然后chmod a+x hello.sh

然后我们调用脚本使用这个: bash hello.sh yourname 然后回应“你好,你的名字” 如果你只是调用use bash hello.sh而没有这个脚本的参数 您将收到类似Usage: hello.sh Argument

的错误消息

enter image description here