Bash
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
use"$@"
。您不需要局部變數 __pkg。在我看來,它不必要地使腳本複雜化。
我還注意到您正在使用
$[expression]
算術評估。該語法已被棄用。我建議$((expression))
改用。例如,n=$((n+1))
。這超出了您的問題範圍,但如果您遇到
apt-get
超時問題,您可能需要尋找解決方案來避免這種情況,例如設置本地鏡像。