Shell 函数仅使用第一个参数

Shell 函数仅使用第一个参数

我正在编写一个脚本来自定义 Linux 的全新安装,并且有几个部分运行 apt-get install。我的连接遇到了一些问题,它偶尔会停止工作,这可能会导致 apt-get 失败,当发生这种情况时,脚本将继续处理其他命令。

以下脚本有效,但现在我遇到了另一个问题:例如,如果发出该函数aptinstall firefox firefox-locale-en,它只会安装列出的第一个包。

我修改了脚本,以便 apt-get 在一个函数中运行,如果失败最多 5 次,该函数将重试:

# Install package - will retry download if connection fails up to 5 times and abort if unsuccessful
function aptinstall (){
local __pkg=$1
    set +x
    n=0
    until [ $n -ge 5 ]
    do
        apt-get install -y $__pkg && break
        n=$[$n+1]
        sleep 15 # Wait 15 seconds before trying to download and install packages again
    done
    if [ "$n" -eq 5 ]; then
        echo >&2 "An error has occurred. Please check your network connection."
        exit 1
    fi

谁能帮我弄清楚为什么只安装第一个包?谢谢!

答案1

而不是使用$1使用"$@".

您不需要局部变量 __pkg。在我看来,这不必要地使脚本变得复杂。

我还注意到您正在使用$[expression]算术评估。该语法已被弃用。我建议使用$((expression))。例如,n=$((n+1))

这超出了您的问题范围,但如果您遇到apt-get超时问题,您可能需要研究解决方案来避免这种情况,例如设置本地镜像。

相关内容