前几天在做2014马哥Linux0214的作业的时候,发现其实这三题在0217中有解答,当然觉得马哥比自己写得好太多,所以忍不住要把马哥的答案贴出来,以供自己学习。
第一题:写一个脚本,用for循环实现显示/etc/init.d/functions、/etc/rc.d/rc.sysinit、/etc/fstab有多少行
#!/bin/bash
for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab;do
lineCount=`wc -l $fileName | cut -d‘ ‘ -f1`
echo "$fileName:$lineCount lines."
done
或者更为简洁:
#!/bin/bash
for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab;do
echo "$fileName:`wc -l $fileName | cut -d‘ ‘ -f1` lines."
done
这么写无疑是最简洁的。
第二题:写一个脚本,将上一题中三个文件复制到/tmp目录中,用for循环实现,分别将每个文件的最近一次修改时间改为2011年9月15日13点27分。
#!/bin/bash
for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab;do
cp $fileName /tmp
baseName=`basename $fileName`
touch -mt 201109151327 /tmp/$baseName
done
第三题:写一个脚本,显示/etc/passwd中第3、7和11个用户的用户名和ID号。
#!/bin/bash
for lineNo in 3 7 11;do
userInfo=`head -n $lineNo /etc/passwd | tail -1 | cut -d: -f1,3`
echo -e "User:`echo $userInfo | cut -d: -f1`\nUid:`echo $userInfo | cut -d: -f2`"
done
我自己写成如下,做了点小改动,我觉得适合我的风格,但主体框架不变。
#!/bin/bash
way=/etc/passwd
for lineNo in 3 7 11;do
echo "User name:`head -$lineNo $way | tail -1 | cut -d: -f1` UserID:`head -$lineNo $way | tail -1 | cut -d: -f3`"
done
个人感觉,马哥的第三题有些繁琐啊。
刚开始的几个toy programme,对思路启发的价值比较大。