Bash

bash腳本:如果返回錯誤則重複命令

  • April 5, 2021

如果返回錯誤,我想創建一個重複 ncftp 傳輸的循環。

我有點不確定如何在循環中使用退出程式碼變數。像這樣的東西會起作用嗎?

until [$? == 0]; do
   ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
done

我在 serverfault 的其他地方找到了這個優雅循環的基礎。事實證明不需要保存退出程式碼,因為您可以直接在命令本身上進行測試;

until ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file; do
 echo Tansfer disrupted, retrying in 10 seconds...
 sleep 10
done

幾乎。您可能最好將返回值保存為變數,以便您可以在循環之前預先設置它。否則會受到上次執行命令的影響。

您可能還想在sleep其中懸掛一個以阻止它過快重生。

RET=1
until [ ${RET} -eq 0 ]; do
   ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
   RET=$?
   sleep 10
done

引用自:https://serverfault.com/questions/80862