目录
一、for
1、for循环的介绍与使用
使用for循环语句时,需要指定一个变量及取值列表,针对每一个不同的取值重复执行相同的命令序列,直到变量使用完后退出循环,
在这里”取值列表”称为for语句的执行条件
for 循环是固定的循环,也就是在循环是已经知道需要循环几次,有时也把for循环称为计数循环
语法:
for 变量名 in 变量取值列表
do
循环执行的命令
done
for循环会读取in后面的个数,有几个值就会循环几次,默认是一空格为分割符,当让双引号可以将其看为一个整体
举例:
1.1、自定义值
加上双引号在看看
可以看到引号里面的看成一个整体当做一个值进行循环传参
1.2、转意符结合使用
1.3、从变量中取值
先定义一个变量在到in的后面调用这个变量读取里面的每个值在赋予到i上面,在依次的打印出来
1.4、从命令中取值
需要注意命令要用反引号或者$()包裹起来,表示先执行里面的命令在将得到的值进行传参
上面说了for默认是一空格为分割符的,当然这个分隔符也是可以自己指定的
2、修改for循环中默认使用的分割符
2.1、 IFS默认保存着空格分割符可以进行修改
2.2、使用案例可以连续创建多个用户并设置初始化密码
#!/bin/bash
list="xiaoming zhangsan lisi wangwu mixian" #定义用户名列表
passworld=123456 #设置用户的初始密码
for i in $list
do
userdel $i
echo "$i:$passworld" | chpasswd
done
删除用户也是一样的,将useradd改为userdel即可
2.3、检查所有主机的状态也可以将说有主机进行操作入重启
先将所有的主机ip放到一个文件中
2.4、for与seq结合使用
可以查看到{}与seq的效果类似但我感觉seq要好用一些
二、while
1、while的介绍
while是重复判断条件测试操作,只要条件成立就可以反复执行对应的命令序列(也就是循环体),直到条件测试不成立或为假
语法:
while 条件测试操作
do
命令序列
done
注意:while是最容易成为死循环的,所以为了避免陷入死循环中,条件测试设置为while true 或while false,循环推出根据测试条件的退出码来定,一定要设置退出条件!!!
2、while的使用
示范1:
说明:let var–表示每循环一次var的值就减1知道var的值小于或等于0退出循环,上图中的判读条件也是当var的值大于0就进行循环里面的命令
案例2猜价格:
#!.bin/bash
PRICE=$(expr $RANDOM % 1000) #说明:这个¥RANDOM会随机的生成一个数
TIMES=0
echo "商品价格在0~999之间,猜猜看是多少,看你几次可以猜中?"
while true
do
read -p "请输入您猜的价格: " INT
let TIMES++ #统计您猜的次数
if [ $INT -eq $PRICE ];then
echo "恭喜您猜对了,实际价格就是$PRICE"
echo "您一共猜了$TIMES次"
exit 0
elif [ $INT -gt $PRICE ];then
echo "您猜的太大了,高于这件商品的价格了!!!"
else
echo "您猜的太小了,这件商品的价格要高于您想的呦!!!"
fi
done
#说明猜中后要退出本次循环说一在猜中后加上exit推出,并返回的退出状态码是0
三、跳出循环体
在我们使用循环语句进行循环的过程中,有时候需要在未达到循环条件是强制跳出循环,那么shell给我们提供了两个命令实现该功能:
break和continue 注:exit是退出整个脚本的运行了
1、break
介绍:介绍并跳出本次的循环,在for、while等循环语句中,break后面什么都不加表示跳出当前的循环体同时也等价于break 1
也可以在后面加入不同的数字,数字就代表跳出基层循环体,
例如break 3,就是跳出三层循环,如果没有这么多就会出现报错,所以要注意
如上面的如果后面不加break那么即便是输入错误的信息脚本也会提示你让你继续输入数字
2、continue与break的区别
主要查看区别
continue与break类似但是一个是跳出整个循环体一个是跳过本次的循环,下面的案例可以让你清楚的知道他们的区别
先看break:
上图可以看到一个非常简单的打印数字1-6,判断出现3或者5就输出break可以看到到3的时候就直接跳出了这个循环体了后面的4与6都没有打印出来
下面在看continue:
可以看到只是我们判断的3和5的时候跳出本次循环不打印输出,其他的后面的依旧可以打印出来
总结:跳出循环体通常也是要与判断语句结合使用的
其中break是判断到后直接就跳出了整个循环体后面的都不在进行循环了
continue是只是跳过判断的是这个本次循环到的,不会直接跳出整个循环体的,不影响后面的参数继续循环,可以根据自己的需求选择使用
四、shift位置参数的左移指令
定义:shift命令用于对位置参数进行向左移动,通常用于在不知道传入参数个数的情况下一次遍历每个参数然后进行处理
作用: 每执行一次位置参数顺序向左移动,同时$#的数值减1,用于分别处理每个参数,移动出去的参数不在使用。
例如执行了依次shift原来的第一个位置参数就被移出去了,原本的第二个位置参数就代替了第一个就变成了第一个位置参数,以此类推直到没有
#!/bin/bash
if [ $# -le 0 ] ;then
echo "没有提供参数,请再执行脚本的后加入参数"
exit 1
fi
sum=0
while [ $# -gt 0 ]
do
sum=$(($sum+$1))
shift
done
echo "result is $sum"
同样可以试试shift 2 表示移动2个位置参数
五、函数的使用
介绍:函数是一个脚本代码块,您可以对它自定义命名,并且可以在脚本中任意的位置使用这个函数,要使用这个函数,只要使用这个函数名称就可以了
函数:把一个功能封装起来,使用时可以直接调用这个函数名就行,这样的脚本好处就是模块化,代码可持续性强
创建函数的两种方法:
方法一:
function name()
{
命令序列
【return value】
}
方法二:
name()
{
命令序列
【return value】
}
- 1、注意其中的function是可选择的可以省略掉,name是函数的唯一的名称,函数名后面加一个(),里面没有内容,而我们的命令都是放到{}里面的
return value表示函数的返回值,其中return是shell关键字,专门用在函数中返回一个值,这部分可以写也可以不写
- 2、在定义函数的时候,必须在执行程序前面定义或加载(即必须在调度函数地方之前,定义好函数)
- 3、在执行函数是(调用函数),函数前面的function和函数后面的小括号都不要写,直接写函数名字即可
5.1、使用案例:
5.2、案例2:
函数的返回值:函数的退出状态,默认情况下,函数的退出状态是函数的最后一条命令的退出状态。
#!/bin/bash
function fun2() {
echo "创建目录"
if [ -f func ];then
echo "目录已存在"
else
mkdir func
echo "func目录创建成功"
fi
chmod 400 func
ls -ld func
}
echo "testing the function"
fun2
echo "the exit status is: $?" #上面的函数执行完后查看返回状态码显示上面嗯函数是否执行成功
5.3、函数里面的返回值:return命令返回特定的退出码
我们可以通过return命令来退出函数并返回特定的退出码return命令可以使用单个整数值来定义函数退出状态,提供一种通过编程设置函数返回状态的简单方法
主:return语句返回一个退出值给调用函数的程序,而exit的返回值是给执行程序当前的SHELL
案例:
可以看到返回状态码是2,同时也退出了函数的执行,所以return也可以用作退出函数的作用
注意使用函数的返回状态码的时候,要注意一下两点:
1、状态码必须要在函数已结束就进行取值
2、状态码的取值范围(0~~255)
5.4、把函数值赋给变量使用
正如命令输入可以捕获并存放到shell变量中一样,函数的输出也可以捕获并存放到shell变量中。
$(函数名称)将函数的输出结果赋予给NUM变量
5.5、向函数传递参数
第一种情况,函数可以使用位置参数变量表示要传递给函数的参数。
函数名在变量中$0中定义,函数命令行的其他参数使用变量$1、$2……$#可以用确定传递给函数的参数数目。(位置变量的传递)
#!/bin/bash
#函数中判断位置参数如果只有一个那就参数1加参数1,如果是二个参数就是参数1加参数2,其他的数量都是错误
function addem() {
if [ $# -eq 0 ] || [ $# -gt 2 ];then
echo "error,need to input one or two number."
elif [ $# -eq 1 ];then
echo $[$1+$1]
else
echo $[$1+$2]
fi
}
echo -n "adding 10 and 15:" # -n表示后面的echo输出不换行输出结果在一行中显示
value=`addem 10 15` #``反撇好表示先执行里面的值,addem调用这个函数后面更是二个参数
echo $value
#上面是传递二个参数,下面是传递一个和其他的个数,查看效果
echo -n "Lets try adding just one number: "
value=`addem 10`
echo "$value"
echo -n "Finally,tru adding three numbers: "
value=`addem 10 15 20`
echo $value
上面的是在脚本中调用的位置参数,但这个并不灵活,需要将这个位置参数放到脚本外进行使用
第二中情况就是位置参数在脚本外使用
案例2: 其实将是将上面的脚本里面的位置参数也改为$1、$2这种方式就行,就行多次参数即可
今天的文章shell for循环 continue_break退出哪个循环分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85445.html