[英]Better bash script to read two entries of each line of file into two variables
在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
}
是否有更好的实施方案? 任何指针或技巧表示赞赏。 谢谢。
您将在第一次失败时退出循环。 您想要一路修复疣
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
|| return
。
我看到几个怪癖:
cat /etc/fstab | grep xfs
cat /etc/fstab | grep xfs
,grep可以采用文件参数: grep xfs /etc/fstab
$?
转换为变量,然后将该变量与测试命令进行比较; 您可以这样做: if command;then echo success;else echo failure;fi
或command && echo success || echo failure
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)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.