shell-for循环语句练习题

1.计算从1到100所有整数的和

[root@localhost ~]# vim 1.sh
#!/bin/bash
sum=0         #定义变量sum初始值为0
for i in {1..100} #for循环 i取值从1到100
do
sum=$[ i+sum ]    
#在每次循环中,变量i的值会依次取1到100的整数值。
#sum是一个累加器,初始值为0。
#$[ i+sum ]表示将当前循环次数的整数值i与当前的sum值相加,
#并将结果赋值给sum。
#在每次循环结束后,sum的值都会增加当前循环次数的整数值。通过这种方式,循环结束后,sum的值就是从1到100的所有整数之和。
done              #for语句结束标志
echo "1-100的整数和为:$sum"  #循环结束后输出内容[root@localhost ~]# chmod +x 1.sh
[root@localhost ~]# ./1.sh

2..提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

[root@localhost ~]# vim 002.sh#!/bin/bashread -p "请输入一个小于100的整数" p
sum=0       #定义一个变量sum初始值=0if [ $p -gt 0 ] && [ $p -lt 100 ]
# 检查输入是否为整数且小于100
#[ $p -gt 0 ]:判断$p的值是否大于0。如果是,返回真(true);否则返回假(false)。
#[ $p -lt 100 ]:判断$p的值是否小于100。如果是,返回真(true);否则返回假(false)。
#&&:逻辑与运算符,表示两个条件都必须满足时,整个条件判断才为真。thenfor  (( i=1;i<=p;i++ ))
#计算从1到该数之间所有整数的和dosum=$(($sum+$i))doneecho "从1到100所有整数的和为 $sum "elseecho "输入有误"
fi

3.求从1到100所有整数的偶数和、奇数和

#!/bin/bash# 初始化偶数和与奇数和
even_sum=0 #奇数变量初始值
odd_sum=0  #偶数变量初始值#用于判断变量i是否为偶数。
#(( i % 2 == 0 )):使用取模运算符%计算i除以2的余数,如果余数等于0,则表示i是偶数。
#if (( i % 2 == 0 )); then:如果i是偶数,则执行后面的代码块。
for (( i=1; i<=100; i++ ))
doif (( i % 2 == 0 )); theneven_sum=$((even_sum + i))elseodd_sum=$((odd_sum + i))fi
done# 打印结果
echo "从1到100之间所有偶数的和为: $even_sum"
echo "从1到100之间所有奇数的和为: $odd_sum"

4.用户名存放在oses.文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码:若该用户不。输入密码,建立用户并设立其密码

  1 #!/bin/bash2 3 for iname in $(cat /root/oses.txt)4 do5    grep "^$iname" /etc/passwd &> /dev/null6    if [ $? -eq 0 ];then7       echo "已存在"8       userpd=$(grep "^$iname" /etc/shadow | awk -F: '{prin    t $2}')9       if [ "$userpd"=="!!" ] || [ "$userpd" == "*" ] || [     -z "$userpd" ];then10          echo "没有密码,请设置密码"11          read -p "输入用户 $iname 密码:"passwd112          read -p "确认密码 $iname 密码:"passwd213          if [ "$passwd1" == "$passwd2" ];then14             echo $passwd1 | passwd --stdin $iname &> /dev/    null15          else16             echo "密码不一致"17          fi18       fi19    else20       echo "$iname用户不存在"21       read -p "输入用户 $iname 密码:"pd122       read -p "确认密码 $iname 密码:"pd223       if [ "$pd1" == "$pd2" ];then24          useradd $iname25          echo $pd1 | passwd --stdin $iname &> /dev/null26       else27          echo "密码不一致"28       fi29    fi30 done###
检查该用户账户是否存在于/etc/passwd文件中。如果存在,则输出"已存在"。
如果用户账户存在,并且其密码为空(即密码字段为"!!"、"*"或为空),则提示用户输入密码并进行确认。如果两次输入的密码一致,则使用passwd命令将密码设置为该用户的密码。否则,输出"密码不一致"。
如果用户账户不存在,则提示用户输入密码并进行确认。如果两次输入的密码一致,则使用useradd命令创建该用户账户,并使用passwd命令将密码设置为该用户的密码。否则,输出"密码不一致"。

 

5. 检测指定范围主机是否通信,并将通信的主机ip输出到文件host ip中

[root@localhost ~]# vim 05.sh#!/bin/bash
#检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中for num in {22..245} #定义变量从22-245
do{hostip="20.0.0.$num"ping -c 4 -i 0.5 -W 2 $hostip &> /dev/null
# ping -c 4 -i 0.5 -W 2 $hostip &> /dev/null 是一个用于测试网络连接的命令,它的意思是:# ping:使用 ICMP 协议向目标主机发送数据包,以检查网络连接是否正常。
# -c 4:发送 4 个数据包。
# -i 0.5:每个数据包之间的时间间隔为 0.5 秒。
# -W 2:设置等待响应的超时时间为 2 秒。
# $hostip:目标主机的 IP 地址,这是一个变量,需要替换为实际的 IP 地址。
# &> /dev/null:将命令的输出重定向到 /dev/null,即丢弃输出结果,只显示命令执行成功或失败的状态。if [ $? -eq 0 ];then
# 上一个命令的退出状态等于 0(即命令成功执行),则执行 if 语句块中的代码。echo "$hostip is online" >> /root/host_ip.txt
# 将包含主机IP地址的字符串 "hostip is online" 追加到名为 host_ip.txt 的文件中。这个文件位于 /root 目录下。fi}&
done
wait
cat /root/host_ip.txt

6..用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警

[root@localhost ~]# vim 06.sh#!/bin/bash# 初始化变量correct_password="123456"   #正确密码
attempts=3                  #输入次数# 循环提示用户输入密码
for (( i=1; i<=$attempts; i++ ))
# i=1是循环的初始条件,i<=$attempts是循环的继续条件,i++是每次循环后的操作。
# i=1:这是循环变量i的初始值,表示从1开始。
# i<=$attempts:这是循环的继续条件,当i的值小于或等于$attempts时,循环会继续。
# i++:这是每次循环后的操作,表示每次循环后i的值会增加1。
doread -s -p "请输入密码: " input_password# 检查输入的密码是否正确if [[ $input_password == $correct_password ]]; thenecho "密码正确!"exit 0elseecho "密码错误!还有 $((attempts - i)) 次尝试机会。"fi
done# 达到最大尝试次数后报警
echo "连续输错3次密码,已触发报警!"

7.编写能够自动生成一个6位随机密码的脚本

#!/bin/bash
#自动生成一个6位数的随机密码,密码范围可以是小大写字母和数字STR="0123456789shiABCDEFGHIJKLMNOPQRSTUVWXYZ"
# 定义一个字符串STR,包含0-9的数字,以及小写字母和大写字母for ((i=1; i<=6; i++))
# 循环6次,每次循环都会从STR中随机选择一个字符,并将其添加到password变量中
do#获取字符串所有下标的随机数num=$[RANDOM % ${#STR}]#根据随机下标获取一个随机字符passd=${STR:num:1}#将随机字符进行拼接password+=$passddoneecho "6位随机密码为 $password"

8..输出PATH环境变量的目录里所有以se开头的文件

[root@localhost ~]# vim 08.sh#!/bin/bash
#输出PATH环境变量的目录里所有以se开头的文件IFS_OLD=$IFS
# 将当前的内部字段分隔符(Internal Field Separator)保存到变量IFS_OLD中,以便后续恢复
IFS=$IFS':'
# 将内部字段分隔符设置为冒号(:),以便在循环中正确处理路径中的多个目录。for i in $PATH
# 遍历PATH环境变量中的每个目录
do#ls $i/se* 2> /dev/nullfind $i -name "se*" -print 2> /dev/null
# 遍历PATH环境变量中的每个目录
done

9. 求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89..,数列从第3项开始每一项等于前两项之和,打印前10个元素

[root@localhost ~]# vim 09.sh#!/bin/bash# 初始化前两个元素
a=1
b=1# 打印前两个元素
echo $a
echo $b# 计算并打印后续的元素
for ((i=3; i<=10; i++))
# 从3开始,每次增加1,直到10,包括10。在这个循环中,变量i的值会依次为3、4、5、6、7、8、9、10。
do# 计算新元素c=$((a + b))# 打印新元素echo $c# 更新前两个元素a=$bb=$c
done###
首先将变量 a 和 b 初始化为 1,然后通过循环从第 3 个元素开始,
依次计算斐波那契数列的每个元素。
在每次循环中,它使用变量 a 和 b 的值来计算新的元素 c,并将 c 打印出来。
然后,它将变量 a 更新为原来的 b,将变量 b 更新为新计算出的 c。
循环继续进行,直到生成了前 10 个斐波那契数列的元素。

10.使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数

#!/bin/bash
# 使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
# 减法正排
read -p "请输入一个0-255的整数量" num
a=256
for ((i=1; i<=8; i++))
doa=$[a / 2]
# 这行代码将变量 a 除以 2,并将结果赋值给变量 a。换句话说,它将 a 的值更新为原来的一半。result=$[num - a]
# result=$[num - a]:这行代码从变量 num 中减去变量 a 的值,并将结果赋值给变量 result。换句话说,它将 num 的值减去 a 的一半,并将结果存储在 result 变量中。if [ $result -lt 0 ]
# 用于判断变量 $result 的值是否小于0。如果 $result 的值小于0,那么条件成立,执行后续的代码块;否则,跳过该代码块thenecho -n "0"elseecho -n "1"num=$[num - a]fi
done
echo###
这段代码首先提示用户输入一个0到255之间的整数,并将其存储在变量num中。
然后,它初始化变量a为256,并使用循环语句进行8次迭代。
在每次迭代中,它将a除以2,并将结果存储回a中。
接下来,它计算num减去a的结果,并将其存储在变量result中。
如果result小于0,则输出字符"0";
否则,输出字符"1",并将num减去a的结果重新赋值给num。
最后,在循环结束后,输出换行符。
这样,最终得到的输出就是输入的十进制数对应的8位二进制数。

余数倒排

#!/bin/bash# 提示用户输入一个0-255的整数
read -p "输入一个0-255的整数: " num# 初始化结果变量为空字符串
# result=""# 循环8次,每次取num的最低位(余数),并将其添加到结果字符串的前面
for i in {1..8}
doyushu=$[num % 2]  # 取num的最低位(余数)num=$[num / 2]    # 将num除以2,相当于右移一位result=$yushu$result  # 将余数添加到结果字符串的前面
done# 输出转换后的二进制数
echo $result####这段代码首先通过read命令获取用户输入的整数,并将其存储在变量num中。
然后,使用一个循环来逐步将该整数转换为二进制形式。
在每次循环中,它计算num的最低位(余数),并将余数添加到结果字符串的前面。
接着,将num除以2,相当于将其右移一位。最后,循环结束后,输出转换后的二进制数。

#减法正排

 #减法正排


#!/bin/bash
#减法正排read -p "输入一个0-255的整数: " num
#for i in 128 64 32 16 8 4 2 1
a=256
for ((i=1; i<=8; i++))
doa=$[a / 2]result=$[num - a]if [ $result -lt 0 ];thenecho -n 0elseecho -n 1 let num-=$a
fi
done
echo ''###
首先,通过read -p命令提示用户输入一个0-255的整数,并将输入的值赋给变量num。
然后,将变量a初始化为256。
接下来,使用for循环进行8次迭代,每次迭代执行以下操作:
将变量a除以2,更新其值。
计算num减去a的结果,并将结果赋给变量result。
如果result小于0,则输出字符"0";否则,输出字符"1",并更新num的值,将其减去a。
最后,输出一个空行。

11.将一个200行的文件分割成多个50行的文件

#!/bin/bash
#将一个200行的文件分割成多个50行的文件
filepath=/root/test.txt
#定义行数计数器变量
a=0
#定义文件序号变量
i=1
IFS_OLD=$IFS
IFS=$'\n'
for line in $(cat $filepath)
do
let a++
#判断是否已经读入50行,满50行则文件序号+1
c=$[a % 50]
if [ $c -eq 0 ];then
echo $line >> /root/test${i}.txt
let i++
else
echo $line >> /root/test$f{i}.txt
fi
done
IFS=$IFS_OLD###
这段代码是一个bash脚本,用于将一个200行的文件分割成多个50行的文件。首先定义了一个文件路径变量filepath,然后定义了两个计数器变量a和i,分别用于记录当前读取的行数和生成的文件序号。接着,使用IFS(内部字段分隔符)来设置输入字段分隔符为换行符,以便按行读取文件。在for循环中,逐行读取文件内容,每读取一行,计数器a加1。当a是50的倍数时,说明已经读取了50行,此时将当前行写入新的文件,并将文件序号i加1。否则,将当前行写入当前文件。最后,恢复IFS的原始值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts自定义图例显示名称、数值、占比

先上代码 legend: {orient: vertical,left: 10,top:20,data: data,textStyle: {color: #9FB7D5 // 设置图例文字颜色为白色},// type: plain, // 设置图例类型为普通类型itemWidth: 10, // 设置图例项的宽度itemHeight: 10, // 设置图例项的高度formatter: function(name) {let…

Python专题:十、字典(2)

字典定义x{} get()函数 get&#xff08;参数一&#xff0c;参数二&#xff09; 参数一&#xff1a; 需要查找的关键词 参数二&#xff1a; 如果关键词不存在get返回的默认值 字典的更新 update&#xff08;&#xff09;函数&#xff0c;字典y的元素&#xff0c;去更新字…

学生管理系统初级

根据题目要求生成大纲 总结: 1.在书写时&#xff0c;考虑到了书写时id可是是abc... 类型是String&#xff0c;但在根据id获取集合中元素时 list.get() &#xff0c;get&#xff08;&#xff09;里面是int类型。 2.在书写还有一点功能并不完全&#xff0c; 2.1查找时是打印所有…

十.吊打面试官系列-Tomcat优化-通过压测Tomcat调优实战

前言 上一篇文章我们讲解了一下Tomcat底层的结构和执行原理&#xff0c;我们需要重点去掌握的是Tomcat的高内聚低耦合的设计&#xff0c;以及责任链模式&#xff0c;以及Tomcat NIO编程模式&#xff0c;这些是Tomcat比较核心的点&#xff0c;本篇文章我们将对Tomcat的参数做一…

Java学习【类与对象】

类和对象 开始我们就不讲那些把大象放冰箱需要几步来引入面向对象的例子了&#xff0c;直接上干货。 在Java中&#xff0c;类是对现实世界中某一类事物的抽象描述。它包含了该类事物的属性和方法。属性用于描述事物的状态&#xff0c;而方法则用于描述事物可以做的事情。对象也…

Redis 支持的 Java 客户端都有哪些?

Redis 是一种高性能的键值存储系统&#xff0c;它以其快速、灵活和可扩展的特性而闻名。在 Java 开发中&#xff0c;与 Redis 交互的方式通常是通过使用 Redis 的 Java 客户端。 这些客户端提供了访问 Redis 数据库的接口&#xff0c;使开发人员能够在 Java 应用程序中轻松地使…

电脑设置在哪里打开?Window与Mac双系统操作指南

随着科技的不断发展&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;对于许多初学者来说&#xff0c;如何找到并熟悉电脑的设置界面可能是一个挑战。特别是对于那些同时使用Windows和Mac双系统的用户来说&#xff0c;更是需要一篇详尽的指南来…

qml 和 c++类的数据交互

1、 新建一个需要交互的C++类 1)添加QObject头文件 2)添加自QObject的继承 3)添加Q_OBJECT宏 4)使用Q_PROPERTY,定义两个交互的属性,并设置读写的方法和变更属性的信号。 5)添加方法、槽函数和变量 2、在main.cpp中添加实例化对象的QML上下文 1)添加需要QML交互的…

在做题中学习(54):点名

LCR 173. 点名 - 力扣&#xff08;LeetCode&#xff09; 此题有不同的几种解法&#xff1a; 解法一&#xff1a;暴力枚举 O(n); 解法二&#xff1a;哈希表 把原数组丢入哈希表&#xff0c;遍历哈希表&#xff0c;看看哪个数值为0即可。 O(n)空间O(n)时间 解法三&…

Redis如何避免数据丢失?——RDB

目录 1. RDB机制的配置 2. fork()函数和写时复制(Copy On Write&#xff09; 什么是Copy On Write 系统fork中使用Copy On Write机制 3. RDB文件结构 RDB文件内容和内容顺序 InfoAuxFields是rdb信息数据 数据库数据 数据 数据存储格式 字符串编码 操作码 4. RDB的2…

【自研网关系列】数字签名和url动态加密

&#x1f308;Yu-Gateway&#xff1a;&#xff1a;基于 Netty 构建的自研 API 网关&#xff0c;采用 Java 原生实现&#xff0c;整合 Nacos 作为注册配置中心。其设计目标是为微服务架构提供高性能、可扩展的统一入口和基础设施&#xff0c;承载请求路由、安全控制、流量治理等…

【Java EE】数据库连接池详解

文章目录 &#x1f38d;数据库连接池&#x1f338;Hikari&#x1f338;Druid &#x1f340;MySQL开发企业规范⭕总结 &#x1f38d;数据库连接池 在上⾯Mybatis的讲解中,我们使⽤了数据库连接池技术,避免频繁的创建连接,销毁连接 下⾯我们来了解下数据库连接池 数据库连接池负…

「ETL实战」搭建数仓,解决多源业务系统关联分析难题(定制化业务)

在大数据分析盛行的今天&#xff0c;关联分析作为数据挖掘和业务洞察的重要手段&#xff0c;受到了极大关注。然而&#xff0c;随着数据量的激增和源业务系统的复杂性增加&#xff0c;关联分析的性能问题逐渐成为了一个不可忽视的挑战。 本文将介绍借助ETL工具&#xff0c;如何…

大数据面试题 —— 数据库

目录 关系型数据库与非关系型数据库的区别数据库三范式MySQL中 drop、delete、truncate的区别MySQL中 char和 varchar 的区别MySQL中inner join、left join、right join以及full join的区别MySQL中 having 和 where 的区别count(*)、count(1)、count(列名)的区别MySQL中视图和表…

Threejs 学习笔记 | 灯光与阴影

文章目录 Threejs 学习笔记 | 灯光与阴影如何让灯光照射在物体上有阴影LightShadow - 阴影类的基类平行光的shadow计算投影属性 - DirectionalLightShadow类平行光的投射相机 聚光灯的shadow计算投影属性- SpotLightShadow类聚光灯的投射相机 平行光 DirectionalLight聚光灯 Sp…

12.轻量级锁原理及其实战

文章目录 轻量级锁原理及其实战1.轻量级锁的核心原理2.轻量级锁的演示2.1.轻量级锁的演示代码2.2.结果分析 3.轻量级锁的分类3.1.普通自旋锁3.2.自适应自旋锁 4.轻量级锁的膨胀 轻量级锁原理及其实战 引入轻量级锁的主要目的是在多线程环境竞争不激烈的情况下&#xff0c; 通过…

verilog中不重叠序列检测

编写一个序列检测模块&#xff0c;检测输入信号&#xff08;a&#xff09;是否满足011100序列&#xff0c; 要求以每六个输入为一组&#xff0c;不检测重复序列&#xff0c;例如第一位数据不符合&#xff0c;则不考虑后五位。一直到第七位数据即下一组信号的第一位开始检测。当…

C++下使用Matplotlib-cpp的一些配置

Aconda3安装使用 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/下载 切换清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ con…

修改latex中block中公式与block标题间隔过大的问题

修改block中公式与block间隔过大的问题 如图的block中公式出现了空白:代码见下方 \begin{proof}[证明]\begin{align*}&Z\alpha \beta _XX\beta _YY\varepsilon \rightarrow XZ\alpha X\beta _XX^2\beta _YXY\varepsilon X&\\&E\left( Z \right) \alpha \beta _XE\…

STM32实现1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏(标准库和HAL库实现)

目录 一、所选模块 液晶模块选择&#xff08;淘宝上均有售卖&#xff09; 模块引脚 二、嵌入式单片机型号 三、接线表设计 四、开发环境版本说明 五、标准库实现 六、HAL库实现 七、完整工程&#xff08;内含标准库和HAL库源码&#xff09; 代码链接 一、所选模块 液…