43.shell脚本循环与函数

shell脚本循环与函数

for 循环

for 循环用于一次性读取多个信息,逐一对信息进行操作处理,特别适合处理有范围的数据

语法
for 变量名 in 取值列表
do命令序列
done
批量创建用户
#!/bin/bashtouch /root/users.txt
echo aka blues cloe dio foks > /root/users.txtread -p "给用户设置密码:" PASSWD
for i in `cat /root/users.txt`
douseradd $iecho "$PASSWD" | passwd --stdin $iecho "$i"用户创建成功
done

在这里插入图片描述

循环输出
#!/bin/bash
echo "自增"
for ((i=1;i<=10;i++))
doecho $i
doneecho "自减"
for ((i=10;i>=1;i-=2))
doecho $i
done

在这里插入图片描述

计算数字1-100的整数和
#!/bin/bash
a=0
for ((i=1;i<=100;i++))
doa=$(($i+$a))
done
echo "1-100所有整数和为 $a"

在这里插入图片描述


while 循环

while 循环重复测试某个条件,只要条件成立就反复执行

显示 0-10 的所有整数

#!/bin/bash
a=0
while [ $a -le 10 ]
doecho $alet a++
done

在这里插入图片描述

计算 1-100 的整数和

#!/bin/bash
a=0
b=1
while [ $b -le 100 ]
doa=$(($a+$b))let b++
done
echo "1-100的和: $a"

在这里插入图片描述

猜数字游戏

随机猜1000以内的数字

#!/bin/bash
num=$(expr $RANDOM % 1000)
a=0
echo "猜数字的范围为0-999的整数"
while true
do
read -p "请输入你猜的数:" nlet a++
if [ $n -gt $num ];thenecho "猜的数字过大"
elif [ $n -lt $num ];thenecho "猜的数字过小"
elseecho "恭喜你猜对了"echo "你猜的次数为 $a"exit
fi
done

在这里插入图片描述


until 循环

until 循环重复测试某个条件,只要条件不成立就反复执行(与while相反)

求1-100的整数和

#!/bin/bash
a=0
b=1
until [ $b -gt 100 ]
doa=$(($a+$b))let b++
done
echo "1-100的和: $a"

在这里插入图片描述


双for循环

在一个for循环内部再加一个for循环

#!/bin/bash
for ((a=1;a<=3;a++))
doecho "a=$a"for((b=1;b<=5;b++))doecho "b=$b"
done
done

a每加1,b就循环一次

在这里插入图片描述

break 和 continue
  • break:跳出当前循环
  • continue:中止某次循环,不会完全终止整个命令
#!/bin/bash
for ((a=1;a<=3;a++))
doecho "a=$a"for((b=1;b<=5;b++))doif [ $b -eq 3 ];thenbreak	#当b=3时,就停止运行fiecho "b=$b"
done
done

在这里插入图片描述

#!/bin/bash
for ((a=1;a<=10;a++))
do
if [ $a -gt 4 ]&&[ $a -lt 8 ];thencontinue	#当a大于4小于8时,停止循环
fiecho "$a"
done

在这里插入图片描述


用shell脚本写一个九九乘法表
#!/bin/bash
for ((i=1; i<=9; i++))
dofor ((o=1; o<=i; o++))dolet c=$i*$oecho -n "$i*$o=$c "doneecho ""
done
[root@xieyuhui ~]# bash a.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

函数

函数将命令序列按格式写在一起,可重复使用。

函数定义格式
# 方式一
function 函数名 {命令序列
}# 方式二
函数名() {命令序列
}

使用 return 退出函数并返回一个退出值(0-255),通过 $? 显示

#!/bin/bash
function x {read -p "请输入任意一个整数:" nreturn $[$n*2]
}
x
echo "$?"

在这里插入图片描述

函数传参

函数变量的作用范围(局部变量以及全局变量)
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定一个函数的内部local,即局部变量

#!/bin/bashnum1 (){num=$[ $1+$2 ]echo $num
}
num1 $1 $2

在这里插入图片描述


局部变量与全局变量

将变量限定在函数内部使用local命令
即这个local的变量仅仅在当前的函数内有效,在别的函数中无效。

#!/bin/bashabc (){echo "为经过local的变量$i"	#此时局内变量未定义,因此是全局变量i=9local ii=6echo "函数内的变量$i"	  #此时局内变量已定义,因此为i=6
}
i=9
abc
echo "外面变量$i"		#局内定义的变量只能在定义的函数中使用,因此此处为全局变量

在这里插入图片描述

递归函数

递归函数调用自身

#!/bin/bashfunction a(){if [ $1 -eq 1 ];thenecho 1elselocal temp=$[$1-1]local result=`a $temp`echo $[result * $1 ]fi
}read -p "输入一个值:" va
result=`a $va`
echo "阶乘的值为: $result"

在这里插入图片描述


函数库

将常用函数集中放在一个脚本中,在需要使用时直接调用即可

先写一个函数库

[root@xieyuhui ~]# vim hsk.sh
#!/bin/bash
jia(){result=$[ $1 + $2 ]echo "$result"
}jian(){result=$[ $1 - $2 ]echo "$result"
}cheng(){result=$[ $1 * $2 ]echo "$result"
}chu(){if [ $2 -ne 0 ];thenresult=$[ $1 / $2 ]echo "$result"elseecho "除法中分母不能为0"fi
}
[root@xieyuhui ~]# chmod +x hsk.sh
[root@xieyuhui ~]# vim aa1.sh
#!/bin/bash
. /root/hsk.shread -p "请输入第一个数字:" n
read -p "请输入第二个数字:" mresult1=`jia $n $m`
result2=`jian $n $m`
result3=`cheng $n $m`
result4=`chu $n $m`echo "两数之和为: $result1"
echo "两数之差为: $result2"
echo "两数之积为: $result3"
echo "两数之商为: $result4"

在这里插入图片描述

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

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

相关文章

模型部署:(四)安卓端部署Yolov8-v8.2.99实例分割项目全流程记录

模型部署&#xff1a;&#xff08;四&#xff09;安卓端部署Yolov8-v8.2.99实例分割项目全流程记录1、下载ncnn2、下载opencv-mobile3、文件拷贝4、andorid_studio相关配置5、文件内参数设置5、重构项目&#xff1a;6、打包apk7、部署自己训练的实例分割模型1、下载ncnn 地址&…

高并发、低延迟全球直播系统架构

一、 核心架构图 整个系统的数据流和工作流程如下图所示&#xff0c;它清晰地展示了从主播推流到观众观看的完整过程&#xff1a; #mermaid-svg-QzNpj0DWxd5FERPC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QzN…

AWS strands agents 当智能体作为独立服务/容器部署时,它们无法共享进程内状态

当智能体作为独立服务/容器部署时&#xff0c;它们无法共享进程内状态。 以下是针对分布式部署中动态内存库的生产就绪解决方案&#xff1a;1. 基于外部存储的内存库基于 DynamoDB 的共享内存import boto3 from strands import Agent, tool from typing import Dict, Any impor…

第五节 JavaScript——引用类型、DOM/BOM 与异步编程

JavaScript 的第五节课通常会深入探讨 ​​引用类型、DOM 操作、BOM 操作、事件处理以及异步编程​​ 等核心概念。这些知识能让你创建动态交互丰富的网页。下面我将详细讲解这些内容并提供示例。 🚀 JavaScript 第五节:引用类型、DOM/BOM 与异步编程 ⚡ 一、引用类型 引…

使用Pycharm进行远程ssh(以Featurize为例)

使用Pycharm进行远程ssh&#xff08;以Featurize为例&#xff09;文章目录介绍应用背景远程连接Python连接Jupyter介绍应用背景 在使用Pycharm 专业版的时候进行远程ssh连接服务器&#xff08;Featurize&#xff09;的Python解释器和Jupyter 远程连接Python 打开Pycharm点击…

深入研究:ClickHouse中arrayExists与hasAny在ORDER BY场景下的性能差异

最近公司大数据情况下ClickHouse查询性能极差&#xff0c;后来发现在大数据量ORDER BY场景下&#xff0c;arrayExists(x -> x in ...)比hasAny性能快10倍&#xff01;&#xff01;&#xff01;&#xff01; 一、问题重述与研究背景 在大数据量 ORDER BY场景下&#xff0c;…

Spring AI (二)结合Mysql做聊天信息存储

上文讲了&#xff0c;用Spring ai做简单的聊天功能&#xff0c;没看过的可以查看下 Spring AI结合豆包模型 这里简单结合下Jdbc做下聊天记录的存储和查询&#xff0c;让对话变的更智能。 首先是Pom的支持 <dependency><groupId>org.springframework.ai</grou…

【docker】data-root 数据迁移(防止无法加载镜像和容器问题)

操作系统&#xff1a;ubuntu 24.04 docker版本&#xff1a;docker-ce 28.1.1 目标&#xff1a;将/var/lib/docker 的数据迁移到/data/docker停止docker sudo systemctl stop docker.socket sudo systemctl stop docker这个步骤一定要做&#xff0c;否则容易导致数据不一致。 rs…

二、网页的“化妆师”:从零学习 CSS

一、CSS 是什么 1.1 CSS 的定义 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09; 是一种用来给 HTML 页面 添加样式的语言。 简单来说&#xff1a; HTML 负责结构 —— 决定网页上有什么内容。 CSS 负责样式 —— 决定这些内容“长什么样”。 如果…

传统项目管理与敏捷的核心差异

在项目管理领域&#xff0c;传统方法与敏捷方法代表了两种不同的管理思维与实践路径。传统项目管理强调计划性、规范性和阶段性推进&#xff0c;而敏捷则注重灵活性、快速迭代和价值交付。 正如彼得德鲁克所说&#xff1a;“没有完美的计划&#xff0c;只有不断调整的行动。”理…

axios+ts封装

http.ts import axios from axios import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from axios import qs from qs/*** 扩展AxiosRequestConfig&#xff0c;增加一些自定义的属性* isAuth: 自定义的参数中&#xff0c;用来判断是否携带token 因为AxiosReq…

2026新选题:基于K-Means实现学生求职意向聚类推荐职位

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

SpringCloud gateway配置predicates的匹配规则

需求 通过gateway的route规则&#xff0c;实现分组流量配置 资源 一个nacos&#xff0c;一个gateway &#xff0c;一个服务app&#xff08;部署双实例group-1&#xff0c;group-2&#xff09;&#xff0c;实现特定条件下往分组一和分组二流量切换。 方案 1 配置文件 nacos…

android14 硬键盘ESC改BACK按键返回无效问题

在之前的android版本中修改外接键盘ESC为BACK按键做返回键使用&#xff0c;直接修改如下代码即可&#xff1a;--- a/frameworks/base/data/keyboards/Generic.kcmb/frameworks/base/data/keyboards/Generic.kcm-499,7 499,7 key PLUS {### Non-printing keys ###key ESCAPE { …

【开题答辩全过程】以 asp高校外卖订单系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

UVa1063/LA3807 The Rotation Game

UVa1063/LA3807 The Rotation Game题目链接题意输入格式输出格式分析AC 代码IDA*分3次BFS题目链接 本题是2004年icpc亚洲区域赛上海赛区的H题 题意 如下图所示形状的棋盘上分别有8个1、2、3&#xff0c;要往A&#xff5e;H方向旋转棋盘&#xff0c;使中间8个方格数字相同。图&…

用pywin32连接autocad 写一个利用遗传算法从选择的闭合图形内进行最优利用率的排版 ai草稿

好的&#xff0c;我们来深入细说遗传算法&#xff08;Genetic Algorithm, GA&#xff09;在钣金自动排版中的应用。遗传算法 (GA) 在钣金排版中的详细解析遗传算法是一种受达尔文生物进化论启发的元启发式优化算法。它不追求一次性找到数学上的绝对最优解&#xff0c;而是通过模…

Go语言io.Copy深度解析:高效数据复制的终极指南

在日常开发中&#xff0c;我们经常需要在不同的数据源之间复制数据。无论是文件操作、网络传输还是进程通信&#xff0c;数据复制都是不可或缺的基础操作。Go语言的标准库提供了一个强大而高效的工具来简化这一过程&#xff1a;io.Copy。 什么是io.Copy&#xff1f; io.Copy是G…

【Vue3】07-利用setup编写vue(2)-setup的语法糖

其它篇章&#xff1a; 1.【Vue3】01-创建Vue3工程 2.【Vue3】02-Vue3工程目录分析 3.【Vue3】03-编写app组件——src 4.【Vue3】04-编写vue实现一个简单效果 5.【Vue3】05-Options API和Composition API的区别 6.【Vue3】06-利用setup编写vue&#xff08;1&#xff09; 7.【Vue…

Firefox自定义备忘

1.设置firefox右键点击标签直接关闭&#xff0c;由于目前没有插件能实现这个功能&#xff0c;只能手动设置了&#xff08;目前已知支持142和之前的版本&#xff09; firefox117右键关闭macWin 117版本应该可以了&#xff0c;大家可试下&#xff0c;配置方法参考之前的帖子&…