首页 > 解决方案 > 在 bash 脚本的 if 语句中使用函数和参数

问题描述

我正在尝试测试多个函数调用的返回值,同时将参数解析为其中一个。我尝试了以下方法,但它不起作用。

你能帮我吗?

main() {
if prepareEnvironment "$1" &&
    buildInterfaceConfiguration &&
    applyNetworkInterfaceFiles
then
    echo ':D INSTALLATION COMPLETED :D'
    echo ''
else
    echo ''
    echo ':( INSTALLATION FAILED :('
    echo ''
fi
}

prepareEnvironment() {
echo '####################################################################################'
echo 'Preparing environment'
echo '####################################################################################'
echo "num arg: $#"
echo "arg: $1"
echo $1
...

此示例仅在尝试执行函数时返回错误。

标签: bash

解决方案


第一个答案

subshel​​l$(...)是问题,直接写

if prepareEnvironment "$1" &&
    buildInterfaceConfiguration &&
    applyNetworkInterfaceFiles
then
    ...

假设prepareEnvironment "$1"总是 print some text,那么您的版本$(...)将等同于 ...

if some text &&
    buildInterfaceConfiguration &&
    applyNetworkInterfaceFiles
then
    ...

...无论prepareEnvironment "$1". 在这种情况下,some不能将其解释为命令bash,因此会出现错误。

第二个答案

关于缺少的参数:
我看到您prepareEnvironment "$1"在函数内部调用了main。如果要使用$1,则必须先将其传递给main函数。


推荐阅读