注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

谷搜互联网应用www.iguso.com

谷搜专注企业邮箱十二年

 
 
 

日志

 
 

for...do...done (固定回圈)  

2014-07-08 09:26:25|  分类: 谷搜企业邮箱 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

相对于 while, until 的回圈方式是必须要『符合某个条件』的状态, for 这种语法,则是『 已经知道要进行几次回圈』的状态!他的语法是:

  for var in con1 con2 con3 ...

  do

  程式段

  done

  以上面的例子来说,这个 $var 的变数内容在回圈工作时:

  第一次回圈时, $var 的内容为 con1 ;

  第二次回圈时, $var 的内容为 con2 ;

  第三次回圈时, $var 的内容为 con3 ;

  ....

  我们可以做个简单的练习。假设我有三种动物,分别是 dog, cat, elephant 三种, 我想每一行都输出这样:『There are dogs...』之类的字样,则可以:

  [root@www scripts]# vi sh15.sh

  #!/bin/bash

  # Program:

  # Using for .... loop to print 3 animals

  # History:

  # 2005/08/29 VBird First release

  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

  export PATH

  for animal in dog cat elephant

  do

  echo "There are ${animal}s.... "

  done

  等你执行之后就能够发现这个程式运作的情况啦!让我们想像另外一种状况,由于系统上面的各种帐号都是写在 /etc/passwd 内的第一个栏位,你能不能透过管线命令的 cut 捉出单纯的帐号名称后,以 id 及 finger 分别检查使用者的识别码与特殊参数呢?由于企业邮箱http://www.iguso.com/不同的 Linux 系统上面的帐号都不一样!此时实际去捉 /etc/passwd 并使用回圈处理,就是一个可行的方案了!程式可以如下:

  [root@www scripts]# vi sh16.sh

  #!/bin/bash

  # Program

  # Use id, finger command to check system account's information.

  # History

  # 2009/02/18 VBird first release

  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

  export PATH

  users=$(cut -d ':' -f1 /etc/passwd) # 撷取帐号名称

  for username in $users # 开始回圈进行!

  do

  id $username

  finger $username

  done

  执行上面的脚本后,你的系统帐号就会被捉出来检查啦!这个动作还可以用在每个帐号的删除、重整上面呢! 换个角度来看,如果我现在需要一连串的数字来进行回圈呢?举个例子来说,我想要利用 ping 这个可以判断网路状态的指令, 来进行网路状态的实际侦测时,我想要侦测的网域是本机所在的 192.168.1.1~192.168.1.100,由于有 100 台主机, 总不会要我在 for 后面输入 1 到 100 吧?此时你可以这样做哦!

  [root@www scripts]# vi sh17.sh

  #!/bin/bash

  # Program

  # Use ping command to check the network's PC state.

  # History

  # 2009/02/18 VBird first release

  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

  export PATH

  network="192.168.1" # 先定义一个网域的前面部分!

  for sitenu in $(seq 1 100) # seq 为 sequence(连续) 的缩写之意

  do

  # 下面的程式在取得 ping 的回传值是正确的还是失败的!

  ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0 || result=1

  # 开始显示结果是正确的启动 (UP) 还是错误的没有连通 (DOWN)

  if [ "$result" == 0 ]; then

  echo "Server ${network}.${sitenu} is UP."

  else

  echo "Server ${network}.${sitenu} is DOWN."

  fi

  done

  上面这一串指令执行之后就可以显示出 192.168.1.1~192.168.1.100 共 100 部主机目前是否能与你的机器连通! 如果你的网域与我所在的位置不同,则直接修改上头那个 network 的变数内容即可!其实这个例子的重点在 $(seq ..) 那个位置!企业邮箱租用那个 seq 是连续 (sequence) 的缩写之意!代表后面接的两个数值是一直连续的! 如此一来,就能够轻松的将连续数字带入程式中罗!

  最后,让我们来玩判断式加上回圈的功能!我想要让使用者输入某个目录档案, 然后我找出某目录内的档案的权限,该如何是好?呵呵!可以这样做啦~

  [root@www scripts]# vi sh18.sh

  #!/bin/bash

  # Program:

  # User input dir name, I find the permission of files.

  # History:

  # 2005/08/29 VBird First release

  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

  export PATH

  # 1. 先看一看这个目录是否存在?

  read -p "Please input a directory: " dir

  if [ "$dir" == "" -o ! -d "$dir" ]; then

  echo "The $dir is NOT exist in your system."

  exit 1

  fi

  # 2. 开始测试档案罗~

  filelist=$(ls $dir) # 列出所有在该目录下的档案名称

  for filename in $filelist

  do

  perm=""

  test -r "$dir/$filename" && perm="$perm readable"

  test -w "$dir/$filename" && perm="$perm writable"

  test -x "$dir/$filename" && perm="$perm executable"

  echo "The file $dir/$filename's permission is $perm "

  done

  呵呵!很有趣的例子吧


  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017