Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2877894
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: LINUX

2013-02-21 21:03:12


                                                  ---大头针

三、控制结构:

C的程序结构与Shell的程序结构大同小异。

3.1选择结构:

1.If结构

if [ conditon1 ]

then

    statments1

elif [ condition2 ]

then

    statments2

else

    statments3

fi

 如果then和if放在同一行上,就必须要用一个分号把test语句和then分隔开。

if [ -f fred.c ];then

...

fi

#!/bin/sh
echo "Is it morning? Please answer yes or no."
read YES_OR_NO
if [ "$YES_OR_NO" = "yes" ]; then
  echo "Good morning!"
elif [ "$YES_OR_NO" = "no" ]; then
  echo "Good afternoon!"
else
  echo "Sorry, $YES_OR_NO not recognized. Enter yes or no."
  exit 1
fi
exit 0

上例中的read命令的作用是等待用户输入一行字符串,将该字符串存到一个Shell变量中。

。exit它使整个脚本中止运行。最常使用于来自用户输入的不正确请求,比如一条语句没有成功运行或者某些其他错误发生。 exit 语句可以带一个可选参数。参数是一个整数退出状态码,储存在 $? 中的返回给父进程的退出状态码。 0参数意味着脚本成功运行完毕。程序员会用其他值来给父进程传递不同的消息,所以根据子进程的成功或者失败,父进程采取不同的动作。如果没有参数给 exit 语句,父shell使用 $? 变量的现存值。 






2.case结构

 

case variable in

  value) command1

      exit 0

      ;;

  value) command 2

           exit 0

      ;;

esac


 case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码。
使用格式:
case 匹配母板 in
模板1 [ | 模板2 ] … ) 语句组 ;;
模板3 [ | 模板4 ] … ) 语句组 ;;
esac
case语句的匹配是从上往下地匹配顺序。因此,case语句编写的原则是从上往下,模板从特殊到普通。在C语言里,case语句中有default模板,而在shell程序设计中,可能将模板写成*,就可以完成相同的功能。
case语句的模板支持匹配
匹配以n开头的所有情况: n*
匹配yes的所有字母大小不同的情况: [yY][eE][sS]
但不支持{}匹配,因为模板可以使用 | 就可以达到目的。

#!/bin/sh

echo "please iput \"yes\" or\"no\""
read var

case "$var" in
[yY][eE][sS]) echo "your input is yes" ;;
[nN][oO]) echo "your input is no"  ;;
*)  echo "input error" ;;
esac

exit 0


3.2.循环结构:

1.for结构

for name [in list]

do

  statements using $name

done

1.list应该是一系列由空格分隔的字符序列(单词),省略in list 时默认为

 

$@(命令行的参数列表)

2.for循环执行的次数取决于列表list中单词的个数

3.for循环体中一般要出现变量$name,但也可以不出现。

 

2.循环结构:until

until [ condition ]

do

  statments

done

 

condition 条件成立退出循环

 

 

3.循环结构:while循环

while [ condition ]

do

   statments

done

 

条件不成立退出循环

备注:

还有一些经常与循环结合的命令:比如break [n]continue  [n]。和Cbreak Continue功能基本一致。只不过break可以选择跳出几层循环、continue可以选择跳过几个回合。

阅读(706) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~