Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3284926
  • 博文数量: 346
  • 博客积分: 10189
  • 博客等级: 上将
  • 技术积分: 3125
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 19:46
文章分类

全部博文(346)

文章存档

2013年(35)

2011年(35)

2010年(76)

2009年(48)

2008年(152)

分类:

2008-09-17 19:51:46

一、if 条件语句  
格式: 
if 条件表达式 
then #当条件为真时执行以下语句 
命令列表 
else #为假时执行以下语句 
命令列表 
fi 

if 语句也可以嵌套使用 

if 条件表达式1 
then 
if 条件表达式2 
then 
命令列表 
else 
if 条件表达式3 
then 
命令列表 
else 
命令列表 
fi 
fi 
else 
命令列表 
fi 

你可以进行多层嵌套 一个if语句一定要跟一个fi 表示该层条件结束  否则会造成语法错误 
结合前面讲的 举例如下: 
这里先讲一个条件语句中用到的命令test 表示测试test后面的条件是否为真 

if test -f "$1" 
then 
lpr $1 
else 
if test -d "$1" 
then 
cd $1 
lpr $1 
else 
echo "$1不是文件或目录" 
fi 
fi 

以上的例子还可以改成如下所示 

if test -f "$1" 
then 
lpr $1 
elif test -d "$1" #elif 同else if 
then 
(cd $1;lpr $1) 
else 
echo "$1不是文件或目录" 
fi?????? 

以上的例子不知您是否看懂是什么意思吗? 
假如我们现在将这个例子保存为prfile 
chmod +x prfile 
执行刚才的程序 
./prfile aaa 

这个例子是检查你的输入的参数是否是一个文件 如果是就打印 如果是一个目录 先转目录再打印 如果即不是文件也不是目录给出提示 

二、多重条件测试语句case 
格式: 
case 字串 in 
模式) 命令列表;; 
模式) 命令列表;; 
.... 
esac 

多重条件语句是以case 开始以esac结束 中间可以有多个条件列表 功能是测试字串和和里面的模式有没有匹配的,有就执行里面的命令列表 模式也可以是*号 表示任意字串,每个模式里面的最后要心;;双引号结束,否则会发生语法错误。 

现举例如下: 

case $1 in 
*.c) 
cc $1 
;; 
*.txt) 
lpr $1 
;; 
*) 
echo "未知的类型" 
esac 

假如将以上内容保存在文件abc中 

chmod +x abc 
执行 ./abc a.c   将会对文件a.c进行编译 
执行 ./abc readme.txt 将会把文件通过打印机 
假如我将以上内容改一下,你是否会知道它的执行结果? 

case $1 in 
*) 
cc $1 
;; 
*.txt) 
lpr $1 
;; 
*.c) 
echo "未知的类型" 
esac 
阅读(3337) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~