`
tomhibolu
  • 浏览: 1431571 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

除了 if...then...fi 这种条件判断式之外,回圈可能是程序当中最重要的一环了~回圈可以不断的运行某个程序段落,直到使用者配置的条件达成为止。 所以,重点是那个『条件的达成』是什么。除了这种依据判断式达成与否的不定回圈之外, 还有另外一种已经固定要跑多少次的回圈形态,可称为固定回圈的形态呢!上一小节我们已经谈过不定回圈,下面我们来谈谈固定回圈的形态:

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

for var in con1 con2 con3 . . .

do

程序段

done

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

  1. 第一次回圈时, $var 的内容为 con1 ;
  2. 第二次回圈时, $var 的内容为 con2 ;
  3. 第三次回圈时, $var 的内容为 con3 ;
  4. ....

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

#!/bin/bash
#Use for ...loop to print 3 animals
for animal in dog cat elephant
do
echo "There are ${animal}s..."
done

让我们想像另外一种状况,由於系统上面的各种帐号都是写在 /etc/passwd 内的第一个栏位,你能不能透过管线命令的cut 捉出单纯的帐号名称后,以idfinger 分别检查使用者的识别码与特殊参数呢?由於不同的 Linux 系统上面的帐号都不一样!此时实际去捉 /etc/passwd 并使用回圈处理,就是一个可行的方案了!程序可以如下:

#!/bin/bash
#Use id,finger command to check system account's information.
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 吧?此时你可以这样做喔!
#!/bin/bash
#use ping command to check the network's PC state.
network="192.168.1"
for sitenum in $(seq 1 100) #seq为sequence(连续)的缩写之意
do
ping -c 1 -w 1 ${network}.${sitenum} &> /dev/null && result=0 || result=1
if [ "$result" == 0 ]; then
echo "Server ${network}.${sitenum} is UP"
else
echo "Server ${network}.${sitenum} is DOWN"
fi
done

看看很简单吧,我们来看一下ping的用法:

-c count
Stop after sending count ECHO_REQUEST packets. With deadline option, ping waits for count ECHO_REPLY packets, until the timeout expires.


-n Numeric output only. No attempt will be made to lookup symbolic names for host addresses.


-w deadline
Specify a timeout, in seconds, before ping exits regardless of how many packets have been sent or received. In this case ping does not stop after count packet are sent, it waits either for deadline expire or until count probes are answered or for some error notification from network.

-W timeout
Time to wait for a response, in seconds. The option affects only timeout in absense of any responses, otherwise ping waits for two RTTs.

我想要让使用者输入某个目录档名, 然后我找出某目录内的档名的权限,该如何是好?呵呵!可以这样做啦~

#!/bin/bash
#User input dir name, I find the permission of files.
read -p "Please input a directory:" dir
if [ "$dir" == "" -o ! -d "$dir" ]; then
echo "$dir doesn't exist in your system!"
exit 1
fi

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

执行结果如下:

[oracle@99bill-as9 loop]$ sh permission.sh
Please input a directory:/home/oracle/zy
The file /home/oracle/zy/20110901's permission is readable writable executable
The file /home/oracle/zy/20110902's permission is readable writable executable
The file /home/oracle/zy/20110903's permission is readable writable executable
The file /home/oracle/zy/20110904's permission is readable writable executable
The file /home/oracle/zy/20110906's permission is readable writable executable
The file /home/oracle/zy/20110907's permission is readable writable executable
The file /home/oracle/zy/20110908's permission is readable writable executable
The file /home/oracle/zy/ages.sh's permission is readable writable
The file /home/oracle/zy/case.sh's permission is readable writable
The file /home/oracle/zy/datefile.sh's permission is readable writable
The file /home/oracle/zy/date.sh's permission is readable writable
The file /home/oracle/zy/function2.sh's permission is readable writable
The file /home/oracle/zy/function.sh's permission is readable writable
The file /home/oracle/zy/loop's permission is readable writable executable
The file /home/oracle/zy/monitor.sh's permission is readable writable
The file /home/oracle/zy/para.sh's permission is readable writable
The file /home/oracle/zy/t.sh's permission is readable writable

分享到:
评论

相关推荐

    libblockdev-loop-2.18-5.el7.x64-86.rpm.tar.gz

    1、文件内容:libblockdev-loop-2.18-5.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libblockdev-loop-2.18-5.el7.tar.gz #Step2、进入解压后的目录,...

    libblockdev-loop-devel-2.18-5.el7.x64-86.rpm.tar.gz

    1、文件内容:libblockdev-loop-devel-2.18-5.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libblockdev-loop-devel-2.18-5.el7.tar.gz #Step2、进入解压...

    PyPI 官网下载 | loop-calc-0.1.0.tar.gz

    《PyPI官网下载 | loop-calc-0.1.0.tar.gz:深入解析Python库的构建与分发》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球Python开发者提供了一个集中地来发布、分享和查找Python软件包。当...

    netty-all-4.1.28.Final.jar

    6. **Future/CompletableFuture**: 异步结果的表示,可以在操作完成后执行回调,支持链式调用。 除了基本的网络通信功能,Netty还提供了一些高级特性,如零拷贝(Zero-Copy)、流式API、心跳检测、连接池等,这些...

    cyclonev-13.1.0.162.zip

    此外,Quartus II还提供了丰富的设计辅助工具,如波形仿真器ModelSim、硬件在环(Hardware-in-the-Loop)测试、性能分析工具等,以支持整个设计流程。 总的来说,"CycloneV-13.1.0.162.zip"和其中的".qdz"文件是FPGA...

    netty-netty-4.1.32.final-remark.zip

    3. **EventLoop** 和 **EventLoopGroup**:EventLoop 是 Netty 中的单线程执行单元,负责处理 I/O 事件。EventLoopGroup 是 EventLoop 的集合,用于管理多个 EventLoop,分配任务并平衡负载。 4. **Pipeline**:...

    mips-2007-01-21.iso

    mount -o loop mips-2007-01-21.iso /mnt/mipsiso cd /mnt/mispiso #在64位系统中安装32位运行库 apt-get install ia32-libs #运行安装脚本 ./install -d /opt/eldk 检查/opt/eldk文件夹下是否有mips_4KC开头的一...

    VMware-mount-loop-linux.zip

    标题“VMware-mount-loop-linux.zip”暗示了这个压缩包可能包含与在Linux系统上挂载VMware相关的工具或脚本。通常,VMware在Linux环境中使用时,可能会涉及到虚拟磁盘映像文件(如.vmdk)的挂载,以便在不启动虚拟机...

    CentOS-8.1.1911-x86_64-boot.iso

    CentOS-8.1.1911-x86_64-boot.iso CentOS-8.1.1911-x86_64-boot.iso CentOS-8.1.1911-x86_64-boot.iso

    Python库 | pop-loop-1.0.3.tar.gz

    标题中的"Python库 | pop-loop-1.0.3.tar.gz"表明这是一个针对Python编程语言的库,且版本为1.0.3,文件格式为tar.gz,这是一种常见的压缩格式,通常用于打包和分发开源软件项目。描述进一步确认了这确实是一个...

    libblockdev-loop-2.24-6.el8.i686.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    libblockdev-loop-2.24-5.el8.i686.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    libblockdev-loop-2.24-6.el8.aarch64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    libblockdev-loop-2.24-5.el8.aarch64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    libblockdev-loop-2.18-5.el7.i686.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    libblockdev-loop-2.24-7.el8.i686.rpm

    离线安装包,亲测可用

    libblockdev-loop-2.24-7.el8.aarch64.rpm

    离线安装包,亲测可用

    Buck Converter - Open Loop(2.Buck Converter-开环)

    Buck Converter -- Open Loop(2.Buck Converter——开环)Buck Converter -- Open Loop(2.Buck Converter——开环)Buck Converter -- Open Loop(2.Buck Converter——开环)Buck Converter -- Open Loop(2.Buck ...

    libblockdev-loop-devel-2.18-5.el7.i686.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    libblockdev-loop-devel-2.24-5.el8.i686.rpm

    rpm安装包

Global site tag (gtag.js) - Google Analytics