Bash

在 bash 中檢查命令是否成功

  • December 29, 2017

我目前正在編寫一個小腳本來備份大量磁片,然後將它們格式化以備後用。

dd用來複製磁碟的映像並cp複制磁碟上的所有文件。

以下是我用來執行此操作的命令:

# Copying disk image
dd if="/dev/fd0" of="/path/to/backup/folder" &>/dev/null && sync

# Copying disk files
cp -R "/mnt/floppy/." "/path/to/backup/folder/" &>/dev/null

在這個過程之後,腳本需要格式化磁片。dd我的問題是我希望我的腳本只有在兩個備份命令(和cp)都成功的情況下才格式化磁片。

例如,如果dd因為壞塊而無法複製所有 1.44MB 的磁片,則不要格式化磁片。

我如何測試兩個命令是否成功(它們必須單獨測試,因為我並不總是備份磁碟的映像和文件)?

我會做:

ok=true
if dd ...; then
 sync
else
 ok=false
fi

cp ... || ok=false

if "$ok"; then
 mformat...
fi

由於您使用的是 bash,因此只需添加:

set -e

到腳本的開頭,只要任何命令失敗,它就會失敗。

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