文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第五章流程控制(case,select,while/until)

第五章流程控制(case,select,while/until)

时间:2010-05-02  来源:zbhknightMJ

这章还剩一点,搞定再睡觉,尽管明早还要上班!!!

case
cade的语法如下:
case expression in
    pattern1 ) statements ;;
    pattern2 ) statements ;;
    ....
    ....
    * )  statements ;;
esac

有几点需要注意的,首先是pattern实际上可以由||分隔的几个模式组成,相当于或。再者是小括号 ) 前面是有一个空格的,每种条件后面结束时是有两个分号;;。最后一个模式*是匹配所有,相当于c++里面的缺省。


select
select语法:
select name [in list]
do
    statements that can use $name....
done

select可以很容易生成菜单,除了关键字之外,语法和for是一样的。
.生成列表内每一条目的菜单,并且将之格式化,是每一选择对应一个数字。
.提示用户输入数字
.将已选条目保存在变量name中,已选择编号保存在内置变量REPLY中。
.执行条目内的语句。
.无限循环该过程。

........(貌似后面还有不少,以后补全)
今天来把它补全吧。。。。。
问题:编写脚本,将PATH里面的目录逐个打印出来,并在前面加上编号。
代码如下:
#!/bin/bash

IFS=:
PS3='directory?'

select selection in $PATH; do
    if [ $selection ]; then
        echo "$selection"
        break
    else
        echo 'invalid selection'
    fi
done

首先将IFS设置成冒号:,PS3的环境变量是提示符,现在修改成directory?。



while和until
这两个的判断和c++是完全了类似的。
while的语法:
while condition
do
   statements....
done

condition实际上是要运行的语句列表。最后一个语句的退出状态被用作条件的取值。这里可是使用带有test的条件语句。

until的语法:
until command; do
   statement....
done
这个意思是执行语句,直到命令运行正确。

上个打印PATH内容的问题,现在可以这样解决,不使用IFS变量。
可以使用while和模式匹配遍历PATH列表:

path=$PATH:

while [ $path ]; do
    ls -ld ${path%%:*}
    path=${path#*:}
done

先给path赋值,注意在后面加上一个冒号:,这样使每个目录后面都有一个冒号。


下面是until的一个例子:
编写脚本试图将文件复制到一个目录,如果失败,等待五秒,然后再试,直至成功。

代码如下:
until cp $1 $2; do
    echo 'failed.waiting.....'
    sleep 5
done

转换成while可以这样:
while ! cp $1 $2; do
    echo 'failed.waiting.....'
    sleep 5
done
相关阅读 更多 +
排行榜 更多 +
哥布林弹球b服手游下载

哥布林弹球b服手游下载

休闲益智 下载
小马样式盒游戏下载

小马样式盒游戏下载

休闲益智 下载
异变小镇中文版下载安装

异变小镇中文版下载安装

冒险解谜 下载