在CentOS linux上,我有/etc/fstab
,其中包含以下条目:
/dev/dsk/xfsvold00 /mnt/00vol xfs defaults 0 2
/dev/dsk/xfsvold01 /mnt/01vol xfs defaults 0 2
/dev/dsk/xfsvold02 /mnt/02vol xfs defaults 0 2
/dev/dsk/xfsvold03 /mnt/03vol xfs defaults 0 2
/dev/dsk/xfsvold04 /mnt/04vol xfs defaults 0 2
/dev/dsk/xfsvold05 /mnt/05vol xfs defaults 0 2
/dev/dsk/xfsvold06 /mnt/06vol xfs defaults 0 2
我正在开发一个执行文件系统挂载的bash脚本。我在尝试
将/etc/fstab
中每行的前两个条目分成两个变量
并在安装中使用这些变量。例如,我需要:
dev/dsk/xfsvold00 /mnt/00vol
dev/dsk/xfsvold01 /mnt/01vol
dev/dsk/xfsvold02 /mnt/02vol
dev/dsk/xfsvold03 /mnt/03vol
我有以下工作原型代码。
mountall() {
# TODO: find a neat trick to get mntvol and mntpt.
cat /etc/fstab | grep xfs > /tmp/tmpfstab
while read mntvol mntpt var3; do
mount -t xfs $mntvol $mntpt;
rc=$?
[ $rc -ne 0 ] && return $rc || echo "mount successful on $mntpt"
done < /tmp/tmpfstab
/bin/rm -rf /tmp/tmpfstab
}
有更好的实施吗?任何指针或提示赞赏。感谢。
答案 0 :(得分:2)
基于@tripleee和@Jahid(谢谢你们),对文件系统类型进行略微严格检查的代码:
mountall () {
awk '$3=="xfs"' /etc/fstab |
while read -r mntvol mntpt var3; do
mount -t xfs $mntvol $mntpt &&
echo "mount successful on $mntpt" ||
echo "mount failed on $mntpt"
done
}
答案 1 :(得分:1)
您在第一次失败时退出循环。沿途固定疣,你想要
mountall () {
grep xfs /etc/fstab |
while read -r mntvol mntpt var3; do
mount -t xfs $mntvol $mntpt &&
echo "mount successful on $mntpt"
done
}
如果意图真的要在第一次失败时中止,请将&& echo
切换回|| return
。
答案 2 :(得分:1)
我看到了几个怪癖:
cat /etc/fstab | grep xfs
,grep可以采用文件参数:grep xfs /etc/fstab
$?
放入变量中,然后将变量与测试命令进行比较;您可以这样做:if command;then echo success;else echo failure;fi
或command && echo success || echo failure
我会这样做:
mountall(){
while read -r mntvol mntpt var3; do
if mount -t xfs $mntvol $mntpt; then
echo "mount successful on $mntpt"
else
echo "mount failed on $mntpt"
return $? # comment this out if you don't want to stop here.
fi
done < <(grep xfs /etc/fstab)
}