红联Linux门户
Linux帮助

一个尚未解决的问题

发布时间:2008-04-01 11:57:06来源:红联作者:Essence
作者:邓登

问题的由来是这样的:在ubuntu的/etc/fstab的第一项中是采用的UUID=×××××的格式。我便在想是否可以写一个脚本替换这一行换回到经典的设备名,如/dev/sda1等等。

dengdeng@shangri-la:~/shell$ ls -la /dev/disk/by-uuid/

这样便可以查看到uuid到设备名的对应关系,既然对应关系已经出来了,那么条件算是都备齐了。接着问题就出来了,过去我用到awk和sed这些工具的时候,被替换的内容采用正则表达式表示,而替换的内容却往往是定死了的。而现在的问题是替换的内容是按照一定的映射关系来对应的,虽然我手头有这一张表,但是对于程序来说,它却是没有规律的,只能通过读取它来相对应,这正是我棘手的地方。

先解决眼前的事情:

dengdeng@shangri-la:~/shell$ ls -la /dev/disk/by-uuid/ | grep 2EC0B010C0AFDC79 |awk -F/ ‘{print “/dev/”$3}’

/dev/sda5

测试一下,返回了正确的效果。

#写一个函数:

replace_uuid () {
ls -la /dev/disk/by-uuid/ | grep $1 |awk -F/ ‘{print “/dev/”$3}’
}

#输入uuid号,会返回对应的设备名。

#接着便是要写实现的部分了。

awk ‘BEGIN {FS=”[ \t=]+”}

#FS=”[ \t=]+”}的意思是将空格,TAB键以及等号均作为分隔符,加上“+”是为了使得分隔符可重叠在一起。

#不匹配UUID的行,不做修改,直接全部输出

$1!~/UUID/ {
print $1,$2,$3,$4,$5,$6,$7,$8,$9
}

#匹配UUID的行,就需要替换了,这也是重点,但我却无法实现。

$1~/UUID/ {
“$2=`replace_uuid $2`”

#问题便出在这,我想从这里调用外面的函数,得以替换,可是似乎如何调用都不起作用。当然我试了另外一些办法,都无法完成这个难题。或许使用“cut和paste”是一个办法,但是我却始终相信总有解决之道,只是我还没有开窍。

print $2,$3,$4,$5,$6,$7,$8,$9

}’ /etc/fstab

#总结:虽然这个问题有点钻牛角尖,但是对于我来说,这是一类问题。便是当替代的内容变得不稳定的时候,我不知道如何来实现,不能实现的原因,我想是在于我对awk中调用shell,特别是自定义的函数,我掌握的不好,或许干脆是我没搞明白。
文章评论

共有 0 条评论