Chinaunix首页 | 论坛 | 博客
  • 博客访问: 318240
  • 博文数量: 82
  • 博客积分: 1530
  • 博客等级: 上尉
  • 技术积分: 771
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-16 03:44
文章分类

全部博文(82)

文章存档

2011年(6)

2010年(76)

我的朋友

分类: LINUX

2010-05-02 04:22:10

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

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
阅读(1180) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~