我目前正在编写一个小脚本来备份大量软盘并随后格式化它们以供以后使用。
我用来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,则不要格式化软盘。
如何测试这两个命令是否成功(必须单独测试它们,因为我并不总是备份磁盘的映像和文件)?
答案1
由于您使用的是 bash,只需添加:
set -e
到脚本的开头,只要任何命令失败,脚本就会失败。
答案2
我会做:
ok=true
if dd ...; then
sync
else
ok=false
fi
cp ... || ok=false
if "$ok"; then
mformat...
fi
答案3
尝试使用:
dd <command>
DD_EXIT_STATUS=$?
cp <command>
CP_EXIT_STATUS=$?
if [[ DD_EXIT_STATUS -eq 0 && CP_EXIT_STATUS -eq 0 ]]; then
format floppy disk
else
... other stuff ...
fi
答案4
为了错误改正你的命令:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
启发在精益制造中: