您的位置:首页 > 编程语言

if与while在脚本编程中的应用与实例

2011-07-24 21:16 363 查看
下面是对程序控制语句的说明:

程序控制语句在shell编程中一般是作为循环的控制条件,现在就介绍一下test表达式的用法:
[表达式][[表达式]]在表达式的前后必须有空格,这些test语句和表达式主要实现的是条件测试的功能,条件测试的种类有3种,分别是整数测试、字符串测试和文件测试;
证书测试即判断两个数值大小,字符串测试辨别两字符串是否相同以及换算的ASCII码的大小,文件测试一个文件是不是很具有可读、可写、可执行、文件的属性等等这些都是文件判断。
下面对三种测试方法所使用的条件进行阐述:
整数测试,其表达式是双目表达式,进行操作符前后数值的比较。
条件表达方法如下:
-lt小于lessthan
-gt大于greaterthan
-le小于等于lessthanequal
-ge大于等于greaterthanequal
-eq等于equal
-ne不等于notequal
eg:
[$A–lt$B]

字符串测试,表达式是双目测试,操作数前后字符串进行比较
==等于-z判断字符串是否为空(空为真,非空位假)
>大于-n判断字符串是否为非空
<小于!=不等于

文件测试,表达式为单目表达式,对操作数后面的文件进行判断
-e判断文件时是否存在-s判断文件是否为空
-d判断文件时都是目录文件-O判断属主是否为发起者
-f判断文件是否为普通文件-L/h判断文件是否为连接/符号链接文件
-r判断文件当前用户权限是否为可读-w判断文件当前用户权限是否为可写
-x判断文件当前用户权限是否为可执行

注意:
在中括号[]内的每个组件都需要有空格键来分隔;
在中括号内的变量,最好都以双引号括起来;
在中括号内的常量,最好都以单或双引号括起来;

下面介绍几种判断语句
if判断语句和while循环语句
单分支
if条件;then
命令
fi
双分支
if条件;then
命令1
else
命令2
fi
多分枝
if条件;then
命令1
elif条件;then
命令2
elif条件3;then
命令3
else
命令4
fi

while循环
while条件;do#当满足条件则循环停止
命令
控制条件#控制条件满足的趋向,防止陷入死循环
done

下面是几个关于if和while的shellscript实例:
写一个脚本:

1、判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其它任何键可以通过vim打开这个指定的脚本;

2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出。

执行格式$./script-test.sh任意脚本

1#!/bin/bash

2#

3bash-n$1&>/dev/null

4C=$?#判断目的脚本是否有错,无错C=0,有错C!=0

5if["$C"-ne'0'];then#如果有错C!=0则执行下面语句

6read-p"thereissomethingwronginyouscript.pressQ/qtoquit,orpressanykeytoedit:"A#从键盘读取,赋值给变量A

7AA=`echo$A|tr'A-Z''a-z'`

#将键入的字符统一转换为小写,赋值给变量AA

8else

9AA='q'#如果没错直接将q赋值给变量AA

10fi

11while["$AA"!="q"];do#如果AA的值不等于q则开始while循环,即此脚本有错且键入的是任意键

12vim$1#用vim打开脚本,次步骤完毕继续向下执行while循环中的剩余语句

13bash-n$1&>/dev/null#继续检测vim编辑完璧的脚本是否有错

14D=$?

15if["$D"-ne'0'];then

#如果仍旧有错继续提示从键盘键入信息

16read-p"yourscriptstillhavesomethingwrong.pressQ/qtoquit,orpressanykeytoedititagain:"B

17AA=`echo$B|tr'A-Z''a-z'`

18else

19AA='q'#如果此时脚本未检测出问题,则将AA赋值为q

20fi#跳出if循环,然后判别while条件是否得到满足;满足AA=q跳出循环;否则继需执行while循环。

21done


写一个脚本:

1、要求用户从键盘输入一个用户名,判断此用户是否存在,如果存在,则返回此用户的默认shell;如果不存,提示用户不存在。

2、判断完成以后不要退出脚本,而是继续提示N|n(next)用户输入其它用户名以做出下一个判断,而键入其它任意字符可以退出;

执行脚本$./user-test.sh


1#!/bin/bash

2#

3read-p"pleaseinputauser:"A#提示从键入待检测用户名

4id$A&>/dev/null#判断用户是否存在

5C=$?

6if["$C"='0'];then#如果存在则C值为零

7finger$A|awk'/Shell/{print$4}'

#输出用户对应的shell

8else

9echo"Nosuchuser."#用户不存在则输出字符串

10fi

11read-p"pressN/ntocontinue,anyotherkeytoquit:"B

#键入字母,选择是继续还是跳出程序

12BB=`echo$B|tr'A-Z''a-z'`#转换大小写

13while["$BB"=='n'];do#只有变量的值是n时,在进入while循环

14read-p"pleaseinputauser:"A#若进入while循环则从新提示输出用户名

15id$A&>/dev/null

16C=$?

17if["$C"='0'];then#对新键入用户名进行判断

18finger$A|awk'/Shell/{print$4}'

19else

20echo"Nosuchuser."

21fi

22read-p"pressN/ntocontinue,anyotherkeytoquit:"B

#循环结尾再次询问是否继续循环

23BB=`echo$B|tr'A-Z''a-z'`

24done


写一个脚本:

1、向系统中添加20个用户,名字为linuxer1-linuxer20,密码分别为其用户名,要使用while循环;

2、要求:在添加每个用户之前事先判断用户是否存在,如果已经存在,则不再添加此用户;

3、添加完成后,显示linuxer1-linuxer20每个用户名及对应的UID号码和GID号码,形如

stu1,UID:1000,GID:1000

1#!/bin/bash

2#

3letI=1#初始化变量I值为1

4while["$I"-ne'21'];do#设置循环范围

5idlinuxer$I&>/dev/null#判断用户是否存在

6if["$?"-ne'0'];then#如果不存在则创建

7useraddlinuxer$I

8else#否则输出用户存在

9echo"user:linux$Ialreadyexited!"

10fi

11idlinuxer$I|awk'{print$1,$2}'|sed"s/uid=\(.*\)(.*)/linuxer$I,UID:\1/g"|sed"s/(.*=/,GID:/g"

#使用awk、sed与通道的配合逐步的将id命令得到的内容层层替换成题目中要求的格式

12I=$[$I+1]#循环次数控制条件

13done


写一个脚本:

1、扫描192.168.0网段内的主机的在线状态,但需要提示用户输入一段IP地址范围,方式是指定起始IP和结束IP;显示结果形如:

Thehost192.168.0.1isUP.

Thehost192.168.0.2isDOWN.

2、使用while循环实现;

3、主机在线状态的输出结果既要显示在屏幕上,同时要求所有主机信息也保存一份至/tmp/host_state;

4、为/tmp/host_state文件中所有主机状态为DOWN的行的行首添加一个#(井号);

5、分别显示指定范围内所有在线的主机总数和不在线主机总数;


1#!/bin/bash
2#
3letN=0
4letM=0
5read-p"pleaseinputtwonumberfortheipaddress'srange:"AB
6if["$A"-gt"$B"];then#判断输入的两个数,小的作为起始地址,大的作为终点地址
7H=$A
8I=$B
9else
10H=$B
11I=$A
12fi
13
14while["$I"-le"$H"];do#限定循环范围
15ping-w1-c1192.168.0.$I&>/dev/null
16C=$?#判断主机是否ping的通
17if["$C"-eq'0'];then#ping通的输出对应字符,并将输出重定向到指定文件
18echo"Thehost192.168.0.$IisUP!"
19echo"Thehost192.168.0.$IisUP!">>/tmp/host_state
20N=$[$N+1]#ping通主机数累加
21else#ping不通的主机输出对应字符,并将输出内容重定向到指定文件

22
23echo"Thehost192.168.0.$IisDOWN!"
24echo"#Thehost192.168.0.$IisDOWN!">>/tmp/host_state
25M=$[$M+1]
26fi
27I=$[$I+1]#循环条件累加
28done
29echo"totalupis$N."
30echo"totaldownis$M."#循环完毕输出统计结果

上面几个实例是对if判断和while循环的简单应用。
July24th21:192011
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  实例 脚本 休闲 if while
相关文章推荐