Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 编程 > Shell > 正文

Shell语言十四 for循环实例演示(一)

时间:2014-05-31 00:43 来源:未知 作者:www.51ou.com 阅读:

例1. 写一个脚本,使用for循环创建目录/tmp/1.dir,/tmp/2.dir和/tmp/3.dir,并将它们的权限均修改为750;

使用mkdir 命令创建目录,使用chmod 命令修改权限,故此脚本可以写成:

1
2
3
4
5
6
#!/bin/bash
 
for DirName in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do
  mkdir $DirName
  chmod 750 $DirName
done

wKiom1N8u_uR88k1AAJoE5P1RUI413.jpg

 

例2. 写一个脚本,使用for循环修改目录/tmp/1.dir,/tmp/2.dir和/tmp/3.dir的最近一次修改时间为2010年3月3号3点3分3秒;

 

参见(10_Linux基础知识及命令————创建和删除文本文件)中touch命令的用法:

touch -m -t [CC]YYMMDDhhmm.ss 可以用来修改文件的修改时间到一个指定的时间,故此脚本可以写成:

 

1
2
3
4
5
6
7
8
#!/bin/bash
 
for Dir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do
  stat $Dir
  touch -m -t 201003030303.03 $Dir
  stat $Dir
done
unset Dir

wKiom1N8v0Xh8G1vAAh4ZALtCTI322.jpg

 

此脚本也可以写成如下形式,其结果是一样的:

1
2
3
for Dir in 1.dir 2.dir 3.dir; do
  touch -m -t 201003030303.03 /tmp/$Dir
done

 

例3:写一个脚本,使用for循环统计/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#开头的行的行数;

 

要统计#开头的行,可以使用grep命令,然后通过管道将选出的行传输给 wc 命令,其核心代码为:grep “^#” /etc/fstab | wc -l, 故此脚本可以写成:

 

1
2
3
4
5
#nano showlines.sh
 #!/bin/bash
  for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do
  grep "^#" $File | wc -l
  done

————————执行结果————

1
2
3
4
5
6
[root@localhost ~]# chmod +x showlines.sh
[root@localhost ~]# ./showlines.sh
7
44
25
[root@localhost ~]#

 

这里可以看到执行结果只有统计数据,但没有指明该数据属于哪个文件,故可以对showlines.sh加以改进:

 

1
2
3
4
5
6
#!/bin/bash
for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do
  LINES=`grep "^#" $File | wc -l`
# 将 grep "^#" $File | wc -l 的执行结果保存为一个变量 LINES
  echo "$File: $LINES"
done

 

由于变量LINES只使用了一次,所以该脚本还可以精简成如下形式:

 

1
2
3
4
#!/bin/bash
for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do
  echo "$File: `grep "^#" $File | wc -l`"
done

wKioL1N8vDSC7OoEAAVaRpn0nI0536.jpg

例4:写一个脚本,使用for循环统计/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#开头的行的行数和空白行数;

 

统计#开头的行可以沿用上一个例子中的语句,统计空白行则可以使用 grep “^$” FileName来操作,故此脚本可以写成:

# nano show_space_line.sh

 

1
2
3
4
5
6
7
#!/bin/bash
for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do
echo “$File:”
echo  “# lines: `grep “^#” $File | wc -l`”
echo “space lines: `grep “^$” $File | wc -l`”
done
unset File

—————————————执行结果—————————————

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# ./show_space_line.sh
/etc/fstab:
# lines: 7
space line: 1
/etc/rc.d/rc.sysinit:
# lines: 44
space line: 96
/etc/inittab:
# lines: 25
space line: 0

 

这里可以看到执行结果顶格显示,不是很美观。为了提高用户体验,可以在显示时加上table键的效果。“\t”在字符串中表示转义为table键效果,echo命令的-e选项,可以用来实现转义,故可修改上述脚本:

 

# nano show_space_line.sh

 

1
2
3
4
5
6
7
#!/bin/bash
 
for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do
  echo "$File:"
  echo -e "\t# lines: `grep "^#" $File | wc -l`"
  echo -e "\tspace lines: `grep "^$" $File | wc -l`"
done

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《Shell语言十四 for循环实例演示(一)》技术文章,《Shell语言十四 for循环实例演示(一)》详细使用和说明,有时《Shell语言十四 for循环实例演示(一)》可能不完善、敬请谅解!如果《Shell语言十四 for循环实例演示(一)》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。