手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Bash 实例,第 2 部分

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

以上代码列出在 /etc 中每个以 "r" 开头的文档。要做到这点,bash 在执行循环之前首先取得通配符 /etc/r*,然后扩展他,用字符串 /etc/rc.d /etc/resolv.conf /etc/resolv.conf~ /etc/rpc 替换。一旦进入循环,根据 myfile 是否为目录,"-d" 条件运算符用来执行两个不同操作。假如是目录,则将 "(dir)" 附加到输出行。

还能够在字列表中使用多个通配符、甚至是环境变量:




 

 for x in /etc/r--? /var/lo* /home/drobbins/mystuff/* /tmp/$/*

 do

     cp $x /mnt/mydir

 done

Bash 将在任何正确位置上执行通配符和环境变量扩展,并可能创建一个很长的字列表。

虽然任何通配符扩展示例使用了 绝对路径,但也能够使用相对路径,如下所示:




 

 for x in ../* mystuff/*

 do

     echo $x is a silly file

 done

在上例中,bash 相对于当前工作目录执行通配符扩展,就象在命令行中使用相对路径相同。研究一下通配符扩展。您将注意到,假如在通配符中使用绝对路径,bash 将通配符扩展成一个绝对路径列表。否则,bash 将在后面的字列表中使用相对路径。假如只引用当前工作目录中的文档(例如,假如输入 "for x in *"),则产生的文档列表将没有路径信息的前缀。请记住,能够使用 "basename" 可执行程式来除去前面的路径信息,如下所示:




 

 for x in /var/log/*

 do

     echo `basename $x` is a file living in /var/log

 done

当然,在脚本的命令行自变量上执行循环通常很方便。这里有一个如何使用本文开始提到的 "$@" 变量的例子:




 

 #!/usr/bin/env bash

 

 for thing in "$@"

 do

     echo you typed $.

 done

 

 

        输出:

 

 $ allargs hello there you silly

 you typed hello.

 you typed there.

 you typed you.

 you typed silly.



      

Shell 算术
在学习另一类型的循环结构之前,最好先熟悉如何执行 shell 算术。是的,确实如此:能够使用 shell 结构来执行简单的整数运算。只需将特定的算术表达式用 "$((" 和 "))" 括起,bash 就能够计算表达式。这里有一些例子:




 $ echo $(( 100 / 3 ))

 33

 $ myvar="56"

 $ echo $(( $myvar   12 ))

 68

 $ echo $(( $myvar - $myvar ))

0 $ myvar=$(( $myvar   1 ))

$ echo $myvar

 57

更多的循环结构:"while" 和 "until"
只要特定条件为真,"while" 语句就会执行,其格式如下:




 while [ condition ]

 do

     statements

 done

通常使用 "While" 语句来循环一定次数,比如,下例将循环 10 次:




 myvar=0

 while [ $myvar -ne 10 ]

 do

     echo $myvar

     myvar=$(( $myvar   1 ))

 done

能够看到,上例使用了算术表达式来使条件最终为假,并导致循环终止。

"Until" 语句提供了和 "while" 语句相反的功能:只要特定条件为 ,他们就重复。下面是个和前面的 "while" 循环具备同等功能的 "until" 循环:




 myvar=0

 until [ $myvar -eq 10 ]

 do

     echo $myvar

     myvar=$(( $myvar   1 ))

 done

Case 语句
Case 语句是另一种便利的条件结构。这里有一个示例片段:




 

 case "$" in

      gz)

            gzunpack $/$

            ;;

      bz2)

            bz2unpack $/$

            ;;

      *)

            echo "Archive format not recognized."

            exit

            ;;

 esac                                      

在上例中,bash 首先扩展 "$"。在代码中,"$x" 是文档的名称,"$" 除去文档中最后句点后文本之外的任何文本。然后,bash 将产生的字符串和 ")" 左边列出的值做比较。在本例中,"$" 先和 "gz" 比较,然后是 "bz2",最后是 "*"。假如 "$" 和这些字符串或模式中的任何一个匹配,则执行紧接 ")" 之后的行,直到 ";;" 为止,然后 bash 继续执行结束符 "esac" 之后的行。假如不匹配任何模式或字符串,则不执行任何代码行,在这个特别的代码片段中,至少要执行一个代码块,因为任何不和 "gz" 或 "bz2" 匹配的字符串都将和 "*" 模式匹配。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!