Shell编程之循环语句与函数
一、for循环语句
1、for语句结构
读取不同的变量值,用来逐个执行一组命令
#格式:
for 变量名 in 取值列表
do
命令序列
done
2、例
[root@localhost data]#vim 1.sh
#!/bin/bash
for i in {a..d} //变量i={abcd}
do //命令序列
echo $i //输出结果
done //循环结束
[root@localhost data]#bash 1.sh //运行脚本
a
b
c
d
#############################################################
[root@localhost data]# vim 99.sh
#!/bin/bash
for ((i=1;i<=9;i++)) //外循环,$i的取值为1,每次循环+1,等于9结束
do
for ((j=1;j<=i;j++)) //内循环,$j的取值为1,每次循环+1,等于$i结束
do
echo -n " $i x $j=$(expr $i \* $j)" //每次循环不换行输出 $ix$j
if [$j -eq $i ] //判断$j和$i是否相等
then //条件成立
echo -e "\n" //则换行
fi //判断结束
done //内循环结束
done //外循环结束
二、while循环语句
1、while语句结构
重复测试某个条件,只要条件成立则反复执行
#格式:
while 条件测试操作
do
命令序列
done
2、例
[root@localhost data]# vim while1.sh
#!/bin/bash
i=1 //定义变量i=1
while [ $i -le 5 ] //当i等于5时停止循环
do
echo $i //每次循环输出i的值
let i++ //每次循环+1
done //结束循环
echo "最后i的值为:$i" //输出最后$i的值
[root@localhost data]# bash while1.sh
1
2
3
4
5
最后i的值为:6
三、until语句
1、until语句结构
重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
2、例
[root@localhost data]# vim zz.sh
#!/bin/bash
i=1 //定义变量i=1
sum=0
until [ $i -eq 51 ] //$i等于51时停止执行
do
sum=$[$i+$sum] //定义sum等于$i + $sum
let i++ //每次循环i+1
done
echo "$sum //打印结果 $sum
[root@localhost data]# bash zz.sh
1275
四、函数
- 将命令序列按格式写在一起,可以方便重复使用命令序列。
- shell函数定义 两种方式
#格式一:
[ function ] 函数名(){
命令序列
[return x] //使用return或exit可以显示地结束函数
}
#格式二:
函数名 (){ //最常用,因为最简洁
命令序列
}
1、函数调用
直接再脚本里定义函数的代码块后写函数名即可完成调用
#这是规范的写法
#!/bin/bash
function fun1 { //定义了一个函数叫做fun1
echo "this is a function"
}
#这是简洁的写法
#!/bin/bash
f1 () {
echo hello
}
f2 () {
echo world
}
f3 () {
echo "`f1` `f2`"
}
f3
2、例
###部署本地yum源
[root@localhost data]# vim zz.sh
#!/bin/bash
backuprepo (){ //函数名
cd /etc/yum.repos.d
mkdir repo,bak
mv *.repo repo.bak
mount /dev/sr0 /mnt &>/dev/null
}
makelocalrepo (){
echo
[local]
name=local
baseurl=file:///mnt
enable=1
gpgcheck=0 > local.repo
}
userlocalrepo (){
yum clean all > /dev/null
yum makecache > /dev/null
yum install -y httpd > /dev/null
}
backuprepo //调用
makelocalrepo //调用
userlocalrepo //调用
3、函数作用范围
在 Shell 脚本中函数的执行并不会开启一个新的子Shell,而是仅在当前定义的Shell 环境中有效。
如果Shell脚本中的变量没有经过特殊设定,默认在整个脚本中都是有效的。
在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local来实现。
函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响。
shell脚本中变量默认全局有效。
local命令:将变量限定在函数内部使用。
五、数组
1、数组的定义
数组是存放在相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用。
2、数组的定义方式
A="1 2 3 456" //定义字符串
A=(1 2 3 4 567) //定义数组
0 1 2 3 4 //其下标示
方式一:
数组名=(value0 value1 value2)
num=(11 22 33 44)
${#num} //显示字符串长度
[root@localhost data]# echo ${num[*]}
11 22 33 44
方式二:
数组名=([0]=value [1]=value [2]value ...)
num=([0]=55 [1]=66 [2]77 [4]88)
[root@localhost data]# echo ${num[*]}
[0]55 [1]66 [2]77 [3]88
方式三:
下标定义
数组名[0]="11"
数组名[0]="22"
数组名[0]="33"
数组名[0]="value"
数组名[0]="value"
数组名[0]="value"
总结
for语句的结构、while语句的结构、untile语句的结构、shell函数定义方法、数组使用方法。