一、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  
                        
                                                
                                        
                        
                    
                    
            
