目录
用于已知循环次数的场景
for 变量名称(注意是名称不是变量$等) [ in 名称范围 ] (可以不写)
do
执行内容 若满足循环则做什么动作
done for循环结束标志
举例:
vim a.sh #创建脚本a.sh
脚本内容:
#!/bin/bash
for i in {1..5} #for循环10次,第一次i=1,第二次i=2以此类推直到i=5
do
echo "$i" #循环动作,每次输出$i
done #for语句结束标志
bash a.sh #调用shell执行脚本a.sh
执行结果:
1
2
3
4
5
for (( 表达式1 ;表达式2;表达式3 ))
do
执行内容 若满足循环则做什么动作
done for循环结束标志
表达式1:定义变量并赋值
表达式2:决定是否循环
表达式3:决定循环变量如何改变,决定循环什么时候结束
举例:
vim a.sh
脚本内容:
#!/bin/bash
for(( i=0;i<=5;i++ )) #定义for循环i变量初始值为0,循环条件i小于等于5,每循环一次i自加1
do
echo "$i" #for循环每循环一次执行一次输出$i
done #for语句结束标志
bash a.sh #调用shell执行脚本
输出结果:
0
1
2
3
4
5
用于不知道循环次数,需要主动结束循环或达到条件结束循环。
while [ 判断条件] 使用while循环满足条件执行do,不满足不执行
do
执行动作 while循环执行动作
done while循环结束标志
举例:
vim b.sh #创建脚本b.sh
脚本内容:
#!/bin/bash
i=0
while [ $i -le 5 ] #变量i小于等于5时执行while循环
do
echo "$i" #循环执行内容,每循环一次打印$i
let i++ #每循环一次计算一次i++即i自己+1
done #while语句结束标志
bash b.sh #调用bash执行b.sh脚本
执行结果:
0
1
2
3
4
5
①while [1 -eq 1] 判断条件写一个永久为真的条件
do 一直执行do内的命令
done
②while true 直接写判断条件为真
do 一直执行do内的命令
done
③while : 判断条件为冒号也表示死循环
do 一直执行do内的命令
done
①表示满足continue条件时跳出循环,但是不影响后续循环执行
举例:
vim a.sh #创建脚本a.sh
脚本内容:
#!/bin/bash
for i in {1..5} #for循环5次从i=1开始到i=5
do
if [ $i -eq 3 ] #if判断语句,若$1等于3则执行then的内容
then
continue #当$i=3时跳出循环但不影响后面循环
fi #结束if语句
echo "$i" #没执行一次for循环输出一次$i
done #for循环结束语句
bash a.sh #调用shell执行脚本
输出结果
1
2
4
5
在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环。
break [数字] 结束数字中的几次循环,若为2则结束自己所在循环和外边嵌套的一层循环,若为3则结束自己所在循环和外边嵌套的2层循环
举例:
vim a.sh #创建a.sh脚本
脚本内容:
#!/bin/bash
for j in {1..3} #第一层for循环,j=1,2,3各执行一次do的内容
do #第一层for循环的执行内容
for i in {1..5} #第二层for循环,i=1,2,3,4,5各执行一次do的内容
do #第二层for循环的执行内容
if [ $i -eq 3 ] #第二层for循环中添加的if判断语句,当$i=3是执行then内容
then
break #第二层for循环判断语句执行命令,break结束循环
fi #if语句结束
echo "$i" #第二层for循环语句执行每循环一次输出$i
done #第二层for循环语句结束标志
done #第一层for循环语句结束标志
bash a.sh #调用bash执行a.sh脚本
执行结果:第二层执行在$i=3是结束了循环,所以只能输出1和2,第一层for循环是循环3次,所以输出了3次。
1
2
1
2
1
2
思路:
①第一步for循环打印一行9个*号
②第二步再添加一个for循环打印一个9行9列的*号正方形
②第三步将*号正方形斜砍一般形成9*9乘法表的基本格式
③第四步将*号9*9乘法表格式用乘法算式替换
9*9乘法表
第一步:
vim 99.sh #创建99.sh脚本
脚本内容:
#!/bin/bash
for i in {1..9} #for循环9次从i=1开始
do
echo -n "*" #每循环一次打印一个*,echo -n参数表示不换行
done #此for循环语句结束
bash 99.sh #调用shell执行脚本
执行结果:
*********
第二步:
vim 99.sh #编辑99.sh脚本
脚本内容:
#!/bin/bash
for j in {1..9} #添加打印列循环,循环9次从j=1开始
do #j循环时做do中的内容
for i in {1..9} #第一步for循环内容不变
do
echo -n "*"
done
echo #列循环每循环一次打印一行空格进行换行
done #列循环for语句结束标志
bash 99.sh #调用shell执行脚本
执行结果:
*********
*********
*********
*********
*********
*********
*********
*********
*********
第三步:
vim 99.sh #编辑99.sh脚本
脚本内容:
#!/bin/bash
for j in {1..9} #列循环内容不变
do
for i in `seq $j` #修改行循环i的取值范围为展开变量j,即当j=1时i取值只有1,所以循环一次。当
j=2时,i取值为1和2,所以i=1和i=2各循环一次,循环2次。以此类推到j=9
do
echo -n "*"
done
echo
done
bash 99.sh #调用shell执行脚本
执行结果:
*
**
***
****
*****
******
*******
********
*********
第四步:
vim 99.sh #编辑99.sh脚本
脚本内容:
#!/bin/bash
for j in {1..9} #列循环内容不变
do
for i in `seq $j`
do
echo -ne "$j*$i=$[ $j*$i ]\t" #行输出内容修改为9*9算式和结果。$[ ]表示计算里面的正整数结
果,echo -e参数表示调用转义符,\t表示制表符即循环时输出一个tab键
done
echo
done
bash 99.sh #调用shell执行脚本
输出结果:
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
需求:测试用户输入的某个32位网段是否可以ping通,且若可以ping通将此ip输出到文件host.txt中。
思路:
①第一步读取用户输入的32位网段。
②使用for循环生成用户输入网段的所有ip。
③使用ping命令在循环中测试用户输入网段内所有ip,注意指定ping包个数和超时结束时间,否则一直ping。
④将循环检查网络连通性放入后台执行。
vim ping.sh #创建ping.sh脚本
脚本内容:
#!/bin/bash
read -p "请输入需要测试的网段,格式为(192.168.30.):" ip #读取用户输入内容为变量ip
for i in {1..254} #for循环254次,从i=1开始
do
{ #将{}内容当成一个整体
ping -c2 -w2 $ip$i &>/dev/null #指定ping包为2个超时结束时间为2秒且将产生的内容全部放入null垃圾桶中,&符号表示错误输出也放入null垃圾桶中
if [ $? -eq 0 ] #if条件判断如果上一个循环执行的命令是正确的则$?返回0,若等于0执行then的内容
then
echo "$ip$i is online" #if条件成立执行打印
echo $ip$i >> host.txt #将if条件成立的ip追加到host.txt文件中
else
echo "$ip$i is offline" #if添加判断不成立执行打印
fi
}& #将循环成立的内容放入后台执行
done
wait #执行结束不等待直接退出
需求:生成随机1-100的价格给用户猜测直到猜对结束游戏,并统计用户猜对猜了几次。
思路:
①第一步生成一个随机1-100数字
②第二步使用while循环写一个死循环直到用户猜对才结束循环
③在执行循环的过程中统计循环执行次数并输出
vim game.sh #创建脚本game.sh
脚本内容:
#!/bin/bash
num=`echo $[ RANDOM%100+1 ]` #$[RANDOM]是一个0-32767的随机数,%100+1除100取余+1表示生成0-100随机数
time=0 #定义猜对次数变量time初始值为0
while true #生成while死循环
do #循环动作为do内的内容
let time++ #每循环一次time变量自加1
read -p "请输入您猜测的数字,范围(1-100):" user #读取用户输入的内容为变量user
if [ $user -eq $num ] #条件判断分支1,如果用户输入等于随机生成执行then动作
then
echo "您猜对了,您一共猜测了$time次" #if分支1条件成立执行输出
break #if分支1条件成立则结束本次循环
elif [ $user -gt $num ] #条件判断分支2,如果用户输入大于随机生成执行本次then动作
then
echo "您猜大了,请往小猜" #条件判断分支2成立提示用户猜大了
elif [ $user -lt $num ] #条件判断分支3,如果用户输入小于随机生成执行本次then动作
then
echo "您猜小了,请往大猜" #条件判断分支3成立提示用户猜小了
fi #if语句结束
done
bash game.sh #调用bash执行脚本
执行结果
请输入您猜测的数字范围(1-100):50
您猜小了,请往大猜
请输入您猜测的数字范围(1-100):60
您猜小了,请往大猜
请输入您猜测的数字范围(1-100):70
您猜大了,请往小猜
请输入您猜测的数字范围(1-100):65
您猜大了,请往小猜
请输入您猜测的数字范围(1-100):62
您猜小了,请往大猜
请输入您猜测的数字范围(1-100):63
恭喜您猜对了,您一共猜了6次
4、数字累加脚本(1-100)
需求:编写脚本实现计算从1加到100的值
思路:
①累加需要用到循环,已知循环次数时使用for循环
②也可以使用while循环达到累加条件时结束循环
vim sum.sh #创建sum.sh脚本
脚本内容:
sum=0 #定义变量sum初始值为0
for i in {1..100} #for循环 i取值从1到100
do
sum=$[ i+sum ] #每次循环内容计算变量i+sum的值赋值给sum
done #for语句结束标志
echo "1-100累加值为:$sum" #循环结束后输出内容
bash sum.sh #调用shell执行脚本
执行结果:
"1-100累加值为:5050"
vim sum1.sh #创建sum1.sh脚本
脚本内容
#!/bin/bash
sum=0 #定义sum变量初始值
i=0 #定义i变量初始值
while [ $i -le 100 ] #while循环,条件为当$1小于等于100时执行
do
sum=$[ i+sum ] #循环执行内容计算i+sum的值重新赋值给i
let i++ #每执行一次循环计算一次变量i自加1
done #while语句结束标志
echo "1-100的累加值为:$sum" #循环完成后输出
bash sum1.sh #调用bash执行脚本
执行结果:
1-100的累加值为:5050
文章浏览阅读2.5k次。并不是苹果说的触点问题,而是软布导线被腐蚀断线问题。用铜箔胶带粘一下就好了。不过二手直接买一个咸鱼上也就三百多,也不贵。这个明显是苹果设计缺陷。直接丢了挺可惜的。拆的时候小心点。我的QQ: 13008312096,有空的话可以帮忙有偿代处理。参考链接如下:nullhttps://www.youtube.com/watch?v=buNYHzMZJdk修复好的样子,毫无违和感:..._ipad10.5键盘套没反应
文章浏览阅读1.3w次,点赞3次,收藏13次。网上下载的gif图很多都不透底,而且尺寸时间什么的都不合适,用ps简单修改一下就好了1.抽帧很多gif图帧数很多,抽帧可以大幅压缩gif大小1.导入gif到ps2.勾选动作和时间轴面板这时我们发现帧和图层的隐藏显示是相对应的这样的话我们操作图层就会打乱帧,我们要让所有的图层都显示,但又不干扰帧的显示3.这时我们就要把它转换为视频时间轴4.然后再转换帧>>转换为..._gif抽帧
文章浏览阅读235次。通过本文将了解到以下内容:优先队列的概念优先队列的实现优先队列的应用1.优先队列的概念优先队列是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列至少需要支持下述操作:a.插入带优先级的元素b.取出具有最高优先级的元素c.查看最高优先级的元素。综合考虑插入和删除的性能 优先队列一般采用堆来实..._优先队列 c++面试
文章浏览阅读281次。windows系统VMware安装Linux虚拟机、配置JDK环境、安装tomcat、安装mysql、安装redis第一部分VMware安装Linux—————————————————————————————————xshell、VMware工具链接:解压之后安装VMware工具xshell不需要安装解压可直接使用..._vm中linux下载安装mysql jdk
文章浏览阅读1k次。# -*- coding: utf-8 -*-import hashlib'''加密解密'''#MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,# 通常用一个32位的16进制字符串表示。md5 = hashlib.md5()update = md5.update('hhhhhaaa')print(md5.hexdigest())#SHA1的结果是160..._咕咕加密v4
文章浏览阅读1.4k次,点赞3次,收藏13次。【代码】使用cesium primitive api绘制三维插值图。_cesium 插值点
文章浏览阅读10w+次,点赞112次,收藏974次。Ubuntu18.04镜像_ubuntu系统18.04
文章浏览阅读6.7k次,点赞3次,收藏17次。一、Json字符串和Json对象定义:1、Json字符串:所谓字符串:单引号或者双引号引起来,是一个String类型的字符串:如下:var person='{"name":"shily","sex":"女","age":"23"}';//json字符串console.log(person)console.log(person.name)console.log(typeof person) 2、Json对象:最显著的特征:对象的值可以用 “对象.属性” 进行访问,_json字符串数组
文章浏览阅读718次。CentOS 7:ip link set interface_name up 或 ip link set interface_name down。Ubuntu:ifconfig interface_name up 或 ifconfig interface_name down。CentOS 7:编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件。Ubuntu:编辑 /etc/network/interfaces 文件。_ubuntu 命令跟centos
文章浏览阅读652次。jpegsr9e windows vs2019生成方法,以及库下载_jpeg library error vs2019
文章浏览阅读647次。总的来说,华为Mate 60/Pro系列手机的高速网速表现引起了广泛的关注,这也是消费者对该系列手机购买热情高涨的一个重要因素。可以看出,华为Mate 60/Pro系列手机的网速表现非常出色,这也是消费者购买该系列手机的一个重要原因。此前,华为Mate 60 Pro的供应量已经增至1500万至1700万台,而最新消息称,华为Mate 60 Pro和Mate 60 Pro+的出货量甚至已上调至2000万台。目前,在中国市场上,手机竞争愈发激烈,不仅华为Mate 60系列,其他品牌的手机也都受到了高温的迎接。_华为mate60pro+核实网络
文章浏览阅读7.1k次。公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。话题:access怎样利用出生日期计算年龄呀!回答:lt;%set rs = server.createobject("adodb.recordset") curid=request("id") sql = "UPDATE pany SET a_num=a_num+1,day_count=day_count+1 WHERE day_lda..._access出生年份表达式