我写了一个bash脚本来检查/ etc / fstab,fsck Option(最后一栏)
0 - 禁用
1 - 启用**
#!/bin/bash
for i in $(cat /etc/fstab | grep -v 'proc\|sda\|rootvg\|sysfs\|debugfs\|fd0\|.host\|nfshome:\|devpts' | awk '{print $6}') ; do
for n in $(cat /etc/fstab | grep -v 'proc\|sda\|rootvg\|sysfs\|debugfs\|fd0\|.host\|nfshome:\|devpts' | awk '{print $1}') ; do
if [[ "$i" != "0" ]] ; then
echo "$n = FSCK check on NON-OS Filesystem ERROR !!!"
else
echo "The Non OS Partiton FSCK Complted Successfully !!!"
fi
done
done
输出:
/dev/repovg/lvol1 = FSCK check on NON-OS Filesystem ERROR !!!
/dev/appvg/appvol-os = FSCK check on NON-OS Filesystem ERROR !!!
/dev/TEST12/TEST12 = FSCK check on NON-OS Filesystem ERROR !!!
/dev/repovg/lvol1 = FSCK check on NON-OS Filesystem ERROR !!!
/dev/appvg/appvol-os = FSCK check on NON-OS Filesystem ERROR !!!
/dev/TEST12/TEST12 = FSCK check on NON-OS Filesystem ERROR !!!
/dev/repovg/lvol1 = FSCK check on NON-OS Filesystem ERROR !!!
/dev/appvg/appvol-os = FSCK check on NON-OS Filesystem ERROR !!!
/dev/TEST12/TEST12 = FSCK check on NON-OS Filesystem ERROR !!!
有什么方法可以消除重复值。
我可以尝试
sh + x script.sh |排序-u
但是,我在脚本本身可以做些什么吗?
答案 0 :(得分:1)
你根本不应该使用嵌套循环。在awk中尝试这样的事情:
awk '!/proc|sda|rootvg|sysfs|debugfs|fd0|.host|nfshome:|devpts/ {
if ($6 != 0) print $1, "= FSCK check on NON-OS Filesystem ERROR !!!"
else print "The Non OS Partiton FSCK Complted Successfully !!!"
}' /etc/fstab
这将逐行读取/etc/fstab
,跳过与正则表达式匹配的行(如grep
中所示)。对于不匹配的行,它会检查第6列并根据值打印两条消息中的一条。
顺便说一句,.
中的.host
表示“任何字符”,因此如果它应该表示文字\.
或考虑删除,则应该将其.
转义为{{1}}它完全是。
答案 1 :(得分:0)
我认为你可以在排序
之后输入uniq
答案 2 :(得分:0)
如果您想要消除脚本中的所有重复项,您必须跟踪这些值并仅打印出您尚未打印的值。管道到"排序-u"应该足够好了。
答案 3 :(得分:0)
您将最后一列中的每个值与每个挂载点组合在一起,不仅会给您太多消息,还会给您错误消息。
gawk '($NF=="0"){ print $1 }' /etc/fstab
应该只打印最后一列中带有0
的第一列条目,并将其放在那里(使用你已经拥有的grep),而不需要另一个循环。