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#!/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
程序控制语句在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
相关文章推荐
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- Perl基本语法实例,变量,数组,函数,if, for, while
- if/while/for 、解决数学难题 、 Python实例
- linux shell流程控制语句实例讲解(if、for、while、case语句实例)
- shell(2):shell中关于if,while,输入参数,函数,c++进程等相关知识应用汇集事例
- Linux shell脚本编程详解及应用实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- shell实例讲解while、for、until、if等
- 重学Python - Day 03 - python基础 -> while循环实例 + Continue && break的应用 + 列表的初步学习
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux的shell脚本中if,for,while的解析与应用
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- c++学习 day2 循环学习(while do while for) 分支学习(if ; if else; if else if; switch的应用 )
- [Shell] if、for、while流程语句以及整数字符串判断比较的实例详解
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载