BASH卸载多个驱动器

时间:2011-11-01 21:32:27

标签: macos bash

我正在为一些Macintosh客户端编写本地登录脚本。我想在尝试再次安装它们之前卸载机器上的许多驱动器,类似于我在Windows客户端上执行的操作。下面列出的是我的代码;但是,如果有一种方法可以优化它或压缩代码,我很好奇吗?

if [ -d "/Volumes/Share1" ]; then
    umount -f /Volumes/Share1
fi

if [ -d "/Volumes/Share2" ]; then
    umount -f /Volumes/Share2
fi

if [ -d "/Volumes/Share3" ]; then
    umount -f /Volumes/Share3
fi

这看起来很笨重,而且我不知道怎么做得更好。

3 个答案:

答案 0 :(得分:2)

for for循环?

for dir in /Volumes/Share[123]; do 
  if [ -d "$dir" ] ; then
    umount -f $dir
  fi
done

在现实生活中,你不太可能想要处理Share[123],所以我希望你想把实际的清单放在那里,比如

for dir in "/Volumes/My Share" "/Volumes/pr0n" "/Volumes/warez"; do

答案 1 :(得分:2)

也许像

VOLUMES="/Volumes/Share1 /Volumes/Share2 /Volumes/Share3"

for volume in $VOLUMES ; do
 [ -d $volume ] && umount -f $volume
done

(您需要对此进行一些修改以处理其中包含空格的名称)

答案 2 :(得分:0)

您始终可以使用功能来减少重复:

unmount_if_necessary() {
    [ -d "$1" ] && umount -f "$1"
}

unmount_if_necessary /Volumes/Share1
unmount_if_necessary /Volumes/Share2
#...