介绍几个shell小知识(3)
ljpbxh027知道吧
全部回复
仅看楼主
level 4
ljpbxh027 楼主
一、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 一. while 循环   while 命令格式     while 条件表   do   命令表   done     执行过程     shell首先执行条件表,如果条件表的最后一条语句的退出状态为零,则执行盾环体内的命令表,执行完后,再检查条件表,如果退出状态为零将继续执行,如此循环往复直到条件表的最后一条语句的退出状态非零. 退出状态为零就是条件为真True.     举例说明 假如shell文件的内容如下:     Sum=0   i=0   while true #true是系统的关键词 表示真   do   i=`expr $i + 1`   Sum=`expr $Sum + $i`   if [ $i = "100" ]   then   break;   fi   done   echo $i $Sum   最后这个程序显示的是 100 5050   这个程序的运算就是将1到100加起来     下面将这个程序再改动一下     Sum=0   i=0   while [ $i != "100" ]   do   i=`expr $i + 1`   Sum=`expr $Sum + $i`   done   echo $i $Sum     改动后的程序运算结果和上面是一样 但程序比上面的要简练     在这个循环中还可以以until做为测试条件 它正好与while测试的条件相反,也就是当条件为假时将继续执行循环体内的语句,否则就退出循环体,下面还用这个例子.     Sum=0   i=0   until [ $i = "100" ]   do   i=`expr $i + 1`   Sum=`expr $Sum + $i`   done   echo $i $Sum   当i不等于100时循环 就是当条件为假时循环,否则就退出,而第一个例子是当i不等于100   时循环,也就是测试条件为真时循环.     二.for 循环   命令格式:   for 变量 in 名字列表   do   命令列表   done     这里的名字列表是一个由空格分隔的字符串列表,shell在执行for循环时每次依次从名字表中取出一个字符串赋给循环变量作为变量的值.   在写for语句时,也可以省略in 名字列表部分,这表示用当前的位置参数来代替这时的名字列表.   下面举个例子   比如在你的电脑中有两个目录,一个是aa,一个是bb在这两个目录中有5个相同的文件,但其中一个目录中的一个或多个文件刚刚修改过,现在我忘记刚才改的是那几个文件 了,那么我靠梢员冉弦幌抡饬礁瞿柯嫉奈募就知道?程序如下:     for File in a1 a2 a3 a4 a5   do   diff aa/$File bb/$File   done     下面再举一个不带名字列表的例子     for File   do   echo $Filw   done     文件内容保存在a.sh中 并可执行   我们在执行这个shell程序时命令行如下:   a.sh a1 a2 a3 a4 a5   执行结果如下:   a1   a2   a3   a4   a5   大家从这个例子中可以看到命令行的参数被逐一读入一次     三.循环控制语句   break 命令不执行当前循环体内break下面的语句从当前循环退出.   continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行.
2005年12月06日 01点12分 1
1