当前位置: 首页 > news >正文

shell循环和函数

目录

  • 1.for循环
  • 2.while循环
  • 3.until循环
  • 4.函数

1.for循环

for循环是固定循环,也就是在循环时就已经知道需要进行几次的循环,有事也把for循环成为计数循环。for的语法如下两种:
语法一

for 变量 in 值1 值2 值3 …(可以是一个文件等)do程序done这种语法中for循环的次数,取决于in后面值的个数(空格分隔),有几个值就循环几次,并且每次循环都把值赋予变量。也就是说,假设in后面有三个值,for会循环三次,第一次循环会把值1赋予变量,第二次循环会把值2赋予变量,以此类推。

语法二

for (( 初始值;循环控制条件;变量变化 ))do程序done语法二中需要注意:
初始值:在循环开始时,需要给某个变量赋予初始值,如i=1;循环控制条件:用于指定变量循环的次数,如i<=100,则只要i的值小于等于100,循环就会继续;变量变化:每次循环之后,变量该如何变化,如i=i+1。代表每次循环之后,变量i的值都加1。

语法一举例

vim test1.sh
#!/bin/bash
#打印时间for time in morning   afternooon  eveningdoecho "This time is $time"
done      ##执行脚本
[root@tdm1 ~]# bash test1.sh 
This time is morning
This time is afternooon
This time is evening

语法一举例:批量压缩脚本

[root@localhost ~]$ vim test2.sh
#!/bin/bash
#批量解压缩脚本cd/lamp
#进入压缩包目录
ls *.tar.gz > ls.log
#把所有.tar.gz结尾的文件的文件覆盖到ls.log 临时文件中
for i in $(cat ls.log) `
#或者这样写for i in `cat ls.log`#读取ls.log文件的内容,文件中有多少个值,就会循环多少次,每次循环把文件名赋予变量idotar -zxf $i &>/dev/null#加压缩,并把所有输出都丢弃done
rm -rf /lamp/ls.log
#删除临时文件ls.log

语法二举例:从1加到100

vim test3.sh
#!/bin/bash
#从1加到100
s=0
for ((i=1;i<=100;i=i+1))
dos=$(( $s+$i ))
done
echo "1+2+3+..+100总和为$s"##执行脚本
[root@tdm1 ~]# bash test3.sh 
1+2+3+..+100总和为5050

语法二举例:批量添加指定数量用户

vim test4.sh
#!/bin/bash
#输入用户名,保存变量
read -p "please input user name: " -t 30 name
#输入添加用户的数量,保存变量
read -p "please input the number of users " -t 30 num
#输入密码,保存变量
read -p "please input the password for users: " -t 30 pass#判断三个变量不为空
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
#执行循环
thenfor  (( i=1; i<=$num; i=i+1 ))do#添加用户,用户名为$name$i,产生的输出到垃圾桶useradd $name$i >>/dev/null 2>&1#设置密码echo $pass | passwd --stdin $name$i >>/dev/null 2>&1done
else#三个变量有一个为空,则退出echo " wrong ! exit !"
fi##执行脚本
[root@tdm1 ~]# bash test.sh 
please input user name: test
please input the number of users 5
please input the password for users: 123456
[root@tdm1 ~]# cat  /etc/passwd |  grep test
test1:x:1000:1000::/home/test1:/bin/bash
test2:x:1001:1001::/home/test2:/bin/bash
test3:x:1002:1002::/home/test3:/bin/bash

语法二举例:批量删除用户

vim test5.sh
#!/bin/bash
#批量删除用户
#读取文件信息,awk切割出用户名
user=$( cat /etc/passwd | grep test | awk -F ":" '{print $1}' )
#循环,有多少用户,循环多少次
for i in $userdo#删除用户userdel -r $idone##执行脚本
[root@tdm1 ~]# bash test5.sh
[root@tdm1 ~]# cat /etc/passwd  | grep test
[root@tdm1 ~]# 

2.while循环

对while循环来讲,只要条件判断式成立,循环就一直会继续,直到条件判断式不成立,循环才会停止。

语法

while [ 条件判断式 ]do程序done

案例:1加到100

vim test6.sh
#!/bin/bash
#从1加到100
#给变量赋值
i=1
s=0
#如果变量i的值小于100,则执行循环
while [ $i -le 100 ]
dos=$(( $s+$i ))i=$(( $i+1 ))
done
echo "This sum is $s"##执行脚本
[root@tdm1 ~]# bash test6.sh 
This sum is 5050

案例:输入的数值进行比较

vim test7.sh
#!/bin/bash
price=$(( $RANDOM % 10 ))
times=0
echo "商品的价格在0-10之间,猜猜是多少?"
while true
doread -p "请输入您猜的价格: " numlet times++if [ $num -eq $price ]thenecho "您猜对了,价格是$price"echo "您总共猜了$times次"exit 0elif [ $num -gt $price ]thenecho "太高了!"elseecho "太低了!"fi
done##执行脚本
[root@tdm1 ~]# bash test7.sh 
商品的价格在0-10之间,猜猜是多少?
请输入您猜的价格: 5
太低了!
请输入您猜的价格: 7
太高了!
请输入您猜的价格: 6
您猜对了,价格是6
您总共猜了3次

3.until循环

和while循环相反,until循环是只要判断式成立则进行循环,一旦判断式成立,则终止循环。

语法:

until [ 条件判断式 ]do程序done

案例:1加到100

vim test8.sh
#!/bin/bash
i=1
s=0
#循环直到i大于100,就停止循环
until  [ $i -gt 100 ]
dos=$(( $s + $i ))i=$(( $i + 1))
done
echo "This sum is $s"##执行脚本
[root@tdm1 ~]# bash test8.sh 
This sum is 5050

4.函数

语法:

function 函数名 () {程序
}

案例:接受用户输入的数字,然后从1加到这个数字

vim test9.sh
!/bin/bash
#定义函数
sum() {s=0for (( i=0;i<=$num;i=i+1 ))dos=$(( $i + $s ))doneecho "1+2+3+..+$num: $s"
}#接收用户输入的数字,并把值赋予变量num
read -p "please input  a  number: " -t 30 num#把变量num的值替换为空,并赋予变量y
y=$( echo $num | sed 's/[0-9]//g'  )#判断变量y是否为空,以确定变量num中是否为数字
if [ -z $y  ]then#调用sum函数,并把变量num的值作为第一个参数传递给sum函数sum $sumelse#如果变量num 的值不是数字,则输出报错信息echo "error,please input a  number!"
fi##执行脚本
[root@tdm1 ~]# bash test9.sh 
please input  a  number: 10
1+2+3+..+10: 55

相关文章:

shell循环和函数

目录 1.for循环2.while循环3.until循环4.函数 1.for循环 for循环是固定循环&#xff0c;也就是在循环时就已经知道需要进行几次的循环&#xff0c;有事也把for循环成为计数循环。for的语法如下两种&#xff1a; 语法一 for 变量 in 值1 值2 值3 …(可以是一个文件等)do程序do…...

京东详情api

简要描述 根据商品id获取详情数据 请求URL http://xxx.xxx.xxx.xxx:xxxx/jd.get.item 请求方式 get 请求Query参数 参数名示例值必选类型说明itemid100016034386是string商品idtokenadmin.api是string权限token 成功返回示例 部分数据展示&#xff1a; {"data&qu…...

MySQL最新版8.1.0安装配置教程

目录 目录 前言 安装流程图 1&#xff0c;MySQL数据库是什么? 2&#xff0c;下载zip压缩包 3&#xff0c;解压到要安装的目录 4,添加环境变量 4.1,找到环境变量 4.2,进行环境变量的添加 5.新建mysql 配置文件 6、安装mysql服务 7、初始化数据文件 8、启动mysql …...

5G试题_1

1、 全息技术属于对5G三大类应用场景网络需求中的哪一种&#xff1f;&#xff08;A&#xff09; A. 增强移动宽带 B. 海量大连接 C. 低时延高可靠 D. 低时延大带宽 2、 在5G时代&#xff0c;不同领域的不同设备大量接入网络&#xff0c;其实引用传统的组网方式和服务提供形式也…...

正规股票配资网站的三个明显特点分析

随着股票市场的快速发展&#xff0c;越来越多的投资者开始考虑使用股票配资来增加自己的资金流动性和收益率。然而&#xff0c;在选择股票配资网站时&#xff0c;投资者往往难以辨别哪些网站是正规的&#xff0c;哪些网站存在风险。因此&#xff0c;以下将分析正规股票配资网站…...

质疑苹果5G信号造假成为闹剧,反而将运营商置于尴尬境地

在iPhone15发布会处于热点之际&#xff0c;一位号称通信专家的人士指责iPhone的5G信号造假&#xff0c;一度闹得沸沸扬扬&#xff0c;导致舆论一开始都是质疑苹果造假&#xff0c;然而在知乎却有更多专业人士指出这位专家不了解5G技术&#xff0c;这个问题或许反而出在运营商身…...

vue 预览zip

ZIP的数据从接口传递数据流过来。解析数据流&#xff0c;并将zip的目录绑定到tree中。 1.引入插件jszip&#xff1a; yarn add jszip 2.在需要引用的页面引用&#xff1a; import JSZip from jszip 3. 实现代码 api(option).then((res)>{ // 接口获取zip的数据流 l…...

人先自辱,而后人辱之

语出《孟 子.离娄上》“夫人必自街&#xff0c;而后人懈之;家必自毁&#xff0c;而后人毁之"。 自己不把自己当人看&#xff0c;别人肯定也不会。善待自己&#xff0c;接纳自己。 过去的不再留恋。 心平气和&#xff0c;气定神闲。 政治论述题&#xff0c;每一个题目&a…...

web端三维重建算法-colmap++

vismap vismap 是colmap 版本 &#xff08;1&#xff09; 支持superpoint superglue &#xff08;2&#xff09; 支持netvlad 图像检索 &#xff08;3&#xff09;支持特征点尺度定权 &#xff08;4&#xff09;支持二维码定位 &#xff08;5&#xff09;支持融合gps &#x…...

MyBatisPlus(二)基础Mapperr接口:增删改查

MyBatisPlus&#xff1a;基础Mapper接口&#xff1a;增删改查 插入一条数据 代码 Testpublic void insert() {User user new User();user.setId(6L);user.setName("张三");user.setAge(25);user.setEmail("zhangsanexample.com");userMapper.insert(use…...

基础项目实用案例

文章目录 倒计时动态生成表格发布留言密码框验证模态框拖拽 倒计时 function countDown(time) {var nowTime new Date();var inputTime new Date(time);var times (inputTime - nowTime) / 1000;var d parseInt(times / 60 / 60 / 24);d d < 10 ? 0 d : d;var h par…...

sprngboot整合kabana

Spring Boot是一个开源框架&#xff0c;可以基于Spring框架快速开发和构建生产级别的应用程序。Kibana是一个可视化和交互式分析平台&#xff0c;用于检索和分析Elasticsearch集群中存储的数据。 下面是Spring Boot整合Kibana的基本步骤&#xff1a; 添加Maven依赖 在pom.xm…...

PostgreSQL 数据备份恢复

文章目录 PostgreSQL 备份方式SQL备份&#xff08;逻辑备份&#xff09;文件系统备份&#xff08;物理备份&#xff09;归档备份&#xff08;物理备份&#xff09; 逻辑备份&恢复物理备份&恢复&#xff08;全量&#xff09;备份恢复 物理备份&恢复&#xff08;某个…...

线性代数的本质(七)——特征值和特征向量

特征值和特征向量 本章特征值和特征向量的概念只在方阵的范畴内探讨。 相似矩阵 Grant&#xff1a;线性变换对应的矩阵依赖于所选择的基。 一般情况下&#xff0c;同一个线性变换在不同基下的矩阵不同。仍然以平面线性变换为例&#xff0c;Grant 选用标准坐标系下的基向量 i…...

c语言进阶部分详解(指针初阶)

大家好&#xff01;&#xff0c;前段时间一直在准备数学建模竞赛&#xff0c;现在也是忙完了。抓紧继续给大家带来c语言的内容。今天给大家带来指针初阶部分的讲解 当我们谈论C语言中的指针时&#xff0c;实际上是在讨论一种非常重要的概念&#xff0c;因为指针是C语言的核心之…...

Socks5代理IP在跨境电商与网络游戏中的网络安全应用

在数字化时代&#xff0c;跨境电商和网络游戏已成为全球网络世界中的两大热门领域。然而&#xff0c;这两者都面临着相似的网络安全挑战&#xff0c;需要高效的网络代理来解决。本文将讨论Socks5代理IP在跨境电商和网络游戏中的关键作用&#xff0c;以及如何通过这一技术增强网…...

Gin框架---基础综述

目录 一&#xff1a;经典入门案例二&#xff1a;请求参数2.1: API参数2.2: URL参数2.3: 表单参数 三&#xff1a; 响应参数四&#xff1a;数据解析和绑定4.1: JSON数据解析绑定4.2: FROM表单数据解析和绑定 五&#xff1a; 路由组六&#xff1a;异步处理七&#xff1a;中间件7.…...

排序算法-快速排序

属性 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中的某元 素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右子序列中所有 …...

【Spring容器的启动过程】

Spring容器的启动过程 Spring 在初始化过程中有二个非常重要的步骤&#xff0c;容器的初始化与刷新。 初始化流程 如果想生成 bean 对象&#xff0c;那么就需要一个 beanFactory 工厂&#xff08;DefaultListableBeanFactory&#xff09;如果想让加了特定注解&#xff08;如 …...

普通二本+转专业学计算机是什么感受

目录 自我介绍转入前为什么转专业为什么转入机械专业 转入后转入后感受确定自学计算机自学计算机的时间分配 自我介绍 作者现在是大二,由于当时高考考砸了,分数在重本线左右,为了去一个稍微好一点的学校,于是填报了化学工程与工艺(并不是说这专业不好,只是填报化工更容易进这个…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...