shell脚本结构化语句
本文中记录一下shell中的两种循环语句:for和while
for循环
for循环是linux shell中最常用的结构,for循环有三种结构:1.列表for循环、2.不带列表for循环、3.C风格的for循环。
1. 列表循环
for var in {list}
do
command
command
...
done
列表循环中,循环执行的次数和list列表中的常数或字符串个数相同,当执行for循环时,首先将list列表中的第一个值赋给循环体作为循环变量,然后执行循环体。接着再赋第二个值,以此类推,直到将list列表中最后一个值赋值执行完后结束整个循环。
示例1:
#!/bin/bash
###
#for i in `seq 1 5` #取值方式与下面一样
for i in {1..5}
do
echo $i
done
列表取值还可以选择步长,例如:
#!/bin/bash
###
sum=0
for i in `seq 1 2 100`
#for i in {1..100..2} #与上面`seq 1 2 100`一样生成1到100,步长为2
do
let sum+=i
done
echo sum:$sum
不带列表循环
不带列表for循环执行时,由用户指定输入参数,shell会自动将命令行输入的所有参数依次组织成列表,每次将一个命令行输入的参数显示给用户,直到所有参数都显示
for var
do
command
command
...
done
示例
#!/bin/bash
###
echo "INPUT of var is: $#"
echo "input is: "
for argument
do
echo $argument
done
#执行
[root@localhost mnt]# ./te-for.sh a b c
INPUT of var is 3
input is:
a
b
c
类C风格的for循环
类C风格的for循环一般被用于循环次数已经知道的情况下;表达式中var1为循环变量赋初值的语句,表达式var2是决定是否进行循环,当判断var2退出状态为0时,执行do和done之间的循环体,当退出状态为非0时,将退出本次循环,执行done后面的语句;表达式var3用于改变循环变量的语句。
示例:
#!/bin/bash
###
sum=0
for (( i=0;i<10;i++ ))
do
let sum+=i
done
echo sum:$sum
while循环
while循环语句也叫测试循环语句,它的循环重复执行次数是利用一个条件来控制是否继续重复执行这个语句的,while语句与for循环语句相比,比较容易懂
while 判断条件
do
command
command
...
done
while之所以命名为前测试循环,是因为它要先判断此循环的条件是否成立,然后才做重复执行操作,也就是说,while循环语句的执行过程是:先判断 ‘添加判断语句’的退出状态,如果退出状态为0,则执行循环体,否则退出执行循环执行done后面的指令,除此之外,while结束循环的方式有两种,一种是 计数控制,一种是 标记匹配控制
- 计数控制
int=1
while (( ${int} <= 5 ))
do
echo $int
let int++
done
#执行
#!/bin/bash
###
int=1
while (( ${int} <= 5 ))
do
echo $int
let int++
done
- 结束标记控制
这种形式是等待用户输入一个参数,当输入的参数与while后的判断语句相等时,就退出整个while循环。如果不等于就等待用户继续输入参数与之对比
read var
while [ $var -ne var2 ]
do
read var
done
示例:猜数字大小
#!/bin/bash
###
read -p "input -a num(1-9) : " num
a=`echo $[RANDOM%10]`
while [ ${num} -ne ${a} ]
do
if [ ${num} -gt ${a} ]; then
echo "To high,try again"
read num
elif [ ${num} -lt ${a} ]; then
echo "Too smaill,try again"
read num
fi
done
echo "good lock"
#执行
[root@localhost mnt]# ./te-for.sh
input -a num(1-9) : 44
To high,try again
2
Too smaill,try again
5
Too smaill,try again
6
Too smaill,try again
7
Too smaill,try again
8
good lock
嵌套循环
一个循环体内又包含另一个完整的循环体,外部循环每次执行都会触发内部循环,当内部所有循环执行完一遍才会执行下一次外部循环
示例:
#!/bin/bash
###
for (( i = 1; i <= 9; i++ ))
do
for (( j=1; j<=i; j++ ))
do
let temp=i*j
echo -n "$i*$j=$temp "
done
echo " "
done
#执行
[root@localhost mnt]# ./te-for.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
循环控制符
有时候需要从循环体重退出循环,退出整个循环或者本次循环,如果是退出整个循环体,则可以使用break,如果是退出本次循环,则可以使用continue
示例:continue
for (( i=1; i<=5; i++ ))
do
if [ $i -eq 3 ]; then
continue
fi
echo $i
done
#执行
[root@localhost mnt]# ./te-for.sh
1
2
4
5
示例:break
for (( i=1; i<=5; i++ ))
do
if [ $i -eq 3 ]; then
break
fi
echo $i
done
#执行
[root@localhost mnt]# ./te-for.sh
1
2
补充内容
外部重定向循环
while还支持从外部文件读取内容
while read line
do
echo $line
done < /file/path
这种方式中while将会一行一行取文件中的内容并将读取的内容定义成变量$line,送到while循环体中进程操作
示例:
#!/bin/bash
#
while read line
do
echo $line
done < /etc/passwd
#执行
[root@localhost mnt]# ./test.sh
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...省略...
指令重定向
while还可以将指令执行的结果重定向到while循环体中
示例:判断/var目录下的文件类型
#!/bin/bash
find /var -maxdepth 1 | while read line
do
if [ -d $line ];then
echo "$line is dirctory"
elif [ -f $line ]; then
echo "$line is file "
elif [ -L $line ]; then
echo "$line is links "
else
echo "$file is other file type"
fi
done
while死循环
while true; do
循环体
done
示例:循环检查mysqld服务状态,如果down机就启动
#!/bin/bash
sleep 5
while true
do
pgrep mysqld
if [ $? -ne 0 ]; then
service mysqld start
else
echo "mysql server ok"
fi
sleep 5
done
shell脚本结构化语句的更多相关文章
- Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)
一.概述 在上一篇里讲到了shell脚本,shell按照命令在脚本中出现的顺序依次进行处理,对于顺序操作已经足够了,但许多程序要求对shell脚本中的命令加入一些逻辑流程控制,这样的命令通常叫做 结构 ...
- Shell脚本、Shell脚本结构、date命令的用法、变量
1.Shell脚本: shell是一种脚本语言 目的:可以实现自动化运维,能大大增加运维的效率.2.Shell脚本结构: #!/bin/bash 以#!/bin/bash开头,即以/bin/ba ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...
- Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...
- shell脚本规划化模板
shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...
- shell 脚本之判断语句 if 详解
使用 Linux 系统这么长时间,对 shell 脚本也算是比较熟悉.其实不管是搞开发,还是搞运维,shell 脚本都是必备的基本技能.这次抽时间好好总结一下 shell 方面的知识,综合的再学习一下 ...
- shell脚本-循环选择语句
shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...
- Linux Shell脚本编程while语句
Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo uptime sleep 3done 2,把监控结果保存 ...
随机推荐
- ubuntu使用ppa源安装最新版本的git
国内也有ubuntu镜像源.但是里面的git都是1.9版本.最新的已经是2.3了 1 首先使用将ppa源加入Ubuntu,交大家 sudo add-apt-repository ppa:pdoes/p ...
- pat1091. Acute Stroke (30)
1091. Acute Stroke (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue One impo ...
- Ubuntu上的相关问题
一.解决Ubuntu中vi命令的编辑模式下不能正常使用方向键和退格键的问题 在Ubuntu中,进入vi命令的编辑模式,发现按方向键不能移动光标,而是会输出ABCD,以及退格键也不能正常删除字符.这是由 ...
- mustache语法 转自小花大方
mustache语法 mustache 模板,用于构造html页面内容.在实际工作中,当同一个模板中想要调用不同的函数来渲染画面,在已经自定义好了的前提下,可以在渲染页面时对传入的参数进行手动判断.[ ...
- C#操作Excel报错:服务器出现意外情况。
C#操作Excel表格时,如遇以下错误: 服务器出现意外情况.(异常来自 HRESULT:0x80010105(RPC_E_SERVERFAULT)) 解决方案: 打开你电脑中的Office-Exce ...
- 将BufferedImage转换为InputStream,亲测可用
private static final Logger logger = Logger.getLogger(Demo.class); /** * 将BufferedImage转换为InputStrea ...
- mysql常用的优化措施
http://www.cnblogs.com/ggjucheng/archive/2012/11/07/2758058.html
- 关于th,td,tr的一些相关标签
tr表示行,td表示列,th其实也是表示列但是在这个标签中的文字会以粗体出现 <th>为表格标题,属性summar为摘要, <caption>标签为首部说明, <thea ...
- python反爬之网页局部刷新1
# ajax动态加载网页 # 怎样判断一个网页是不是动态加载的呢? # 查看网页源代码,如果源码中没有你要的数据,尝试访问下一页,当你点击下一页的时候,整个页面没有刷新, 只是局部刷新了,很大的可能是 ...
- 让你的sharepoint2013具有EMS快递查询的功能
<iframe name="kuaidi100" src="http://www.kuaidi100.com/frame/app/index2.html" ...