Bash

Shell 函式僅使用第一個參數

  • October 14, 2017

我正在編寫一個腳本來自定義 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

誰能幫我弄清楚為什麼只安裝了第一個包?謝謝!

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

您不需要局部變數 __pkg。在我看來,它不必要地使腳本複雜化。

我還注意到您正在使用$[expression]算術評估。該語法已被棄用。我建議$((expression))改用。例如,n=$((n+1))

這超出了您的問題範圍,但如果您遇到apt-get超時問題,您可能需要尋找解決方案來避免這種情況,例如設置本地鏡像。

引用自:https://unix.stackexchange.com/questions/398159