【Shell编程之循环语句与函数】

news2024/11/26 9:50:03

目录

  • 一、for循环语句
    • 示例:
      • 示例1
      • 示例2
    • 示例3
  • 二、跳出循环
    • 举例
  • 转义符
  • 三、while 语句的结构
    • 示例:
  • 四、until语句的结构
    • 1、基本格式
  • 五、seq命令


一、for循环语句

读取不同的变量值,用来逐个执行同一组命令

在这里插入图片描述
在这里插入图片描述

#!/bin/bash
for(( i=0;i<=5;i++ ))
   
i=0   定义for循环i变量初始值为0
i<=5  循环条件i小于等于5
i++   每循环一次i自加1
do
echo "$i"                 #for循环每循环一次执行一次输出$i
done                      #for语句结束标志

在这里插入图片描述

示例:

在这里插入图片描述

示例1

在这里插入图片描述
在用户名文件里设置用户

在这里插入图片描述
验证

在这里插入图片描述

示例2

使用ping命令来查看对应的主机开启状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例3

使用脚本来执行1-100累加值为多少
在这里插入图片描述
在这里插入图片描述

用网段来查找ip地址的存活

#!/bin/bash
read -p "请输入一个ip网段:" ip
for i in {1..254}
do
{
ping -c 3 -W 2 ${ip}${i}  &> /dev/null
if [ $? -eq 0 ]
then
echo "${ip}${i} 存活"
echo ${ip}${i} >> /opt/hosts.txt
else
echo "${ip}${i} 不存活"
fi
}&      输入&来提高效率,只能在小型的文件使用
done

利用for循环将多个文本文件内容合并为一个文件

for i in /opt/*.sh
do
 cat "$i" >> abc.txt       >>重定向追加
done

打印出某个目录下的所有文件

for i in /opt/*      这边opt可以换成别的目录名
do
test -f $i               teat -f 表示一般文件
if [ $? -eq 0 ]
then
echo $i
fi
done

制作一个shell脚本的计算器
都式要用双中括号来括起来

#!/bin/bash
while true
do
read -p "输入第一个数:" num1
read -p "输入运算符号: 加(+);减(-);乘(*);除(/) " fs
read -p "输入第二个数:" num2
if [[ "$fs" == "+" ]]
then
echo "结果为: $(($num1+$num2))"
elif  [[ "$fs" == "-" ]]
then
echo "结果为:$(($num1-$num2))"
elif  [[ "$fs" == "*" ]]
then
echo "结果为:$(($num1*$num2))"
elif  [[ "$fs" == "/" ]]
then
echo "结果为:$(($num1/$num2))"
else
echo "输入有误"
fi
done

实验99乘法表
在这里插入图片描述
在这里插入图片描述

实验99乘法表来计算数值
在这里插入图片描述
在这里插入图片描述

二、跳出循环

continue跳出循环:
表示满足continue条件时跳出循环,但是不影响后续循环执行它的作用是在循环内部跳过本次循环并继续下一次循环

举例

在这里插入图片描述

在这里插入图片描述
使用break 来控制循环流程
在这里插入图片描述
在这里插入图片描述

转义符

只有加上-e才能实验转义符
请添加图片描述

三、while 语句的结构

重复测试某个条件,只要条件成立则反复执行
在这里插入图片描述
在这里插入图片描述

while [判断条件]
do
执行动作   while循环执行动作
done      while循环结束标志

while true  死循环

示例:

批量建立用户

#!/bin/bash
i=0
while [ ${i} -le 10 ]
do
useradd zhang${i}
echo “123123" | passwd --stdin zhang${i} &> /dev/null
if [ $? -eq 0 ]
then
echo "成功"
else
echo "失败"
fi
let i++
done

批量删除用户

#!/bin/bash
i=1
while [ $i -le 10 ]
do
userdel -r zhang${i}
let i++
done

猜价格游戏:
运用了随机数的配置

#!/bin/bash
a=$[RANDOM%100+1]    先创建一个随机数
t=0                 定义一个次数
while true      死循环
do
let t++
read -p "输入一个数字猜价格:" i
if [ $a -eq $i ]
then
echo "你真棒啊"
echo "猜了${t}次"
break
elif [ $i -gt $a ]     
then
echo "猜大了"
else
echo "猜小了"
fi
done

购物
逛淘宝选购商品,
每家商店有五种商品选购 (衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元)每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

#!/bin/bash
sum=0
while true
do
read -p "输入想要购买的商品(衣服500,裤子400,鞋子350,帽子150,袜子50)" gw
case $gw in
衣服)
let sum+=500
;;
裤子)
let sum+=400
;;
鞋子)
let sum+=350
;;
帽子)
let sum+=150
;;
袜子)
let sum+=50
;;
*)
echo "没有找到对应的商品,重新输入"
esac
  read -p "是否继续购买商品" b
if [[ "$b" == "不买了" ]]
then
echo $sum
break
fi
done

四、until语句的结构

1、基本格式

unti1循环通常用于当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环.比如等待某个进程退出、等待某个文件被创建等等

格式:
until [条件测试操作]
do
    判断式/命令序列
done

只有条件不成立的时候才能执行until

在这里插入图片描述

在这里插入图片描述

五、seq命令

一个按顺序进行生成一个序列

seq 10   表示到10结束
正序

在这里插入图片描述

seq 10 -1 1
倒序

在这里插入图片描述

倒序取偶数
seq 10 -2 1

在这里插入图片描述

正序取奇数
seq 1 2 10

在这里插入图片描述

正序取偶数
seq 2 2 10

在这里插入图片描述

a=$(seq 1 10)  反向生成
echo -n $a

在这里插入图片描述

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

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

相关文章

【逻辑位移和算数位移】

<< 运算符 && >> 运算符 正数位移 当 x>>n 中 x 为正数时&#xff0c;会将x的所有位右移x位&#xff0c;同时左边高位补0 显而易见&#xff0c;运算结束后&#xff0c;值为1 。 可知右移n位&#xff0c;结果就是 x / 2^n&#xff1a;7 / 2 ^2 1;…

运行vue项目报DONE Build complete. The dist directory is ready to be deployed.解决办法

一、问题描述 今天在运行一个vue项目时发现运行途中报这样一个错误&#xff0c;经过查阅相关资料可知&#xff0c;这是dist文件夹下 二、解决办法 根据官方文档&#xff0c;目录需要启动一个 HTTP 服务器来访问 (除非你已经将 publicPath 配置为了一个相对的值)&#xff0c;所…

flex垂直方向布局与overflow结合使用

主要是需要留意 flex布局和overflow 之间的关系&#xff0c; 最外面的container 和 里面的main-box 之间分别使用了flex布局 和 overflow:hiddenmain-box 和 里面的main-body 之间分别使用了 flex布局 和 overflow:auto 有点类似于聊天的窗口布局 <!DOCTYPE html> <h…

zabbix监控远程主机

zabbix监控远程主机 在Zabbix服务器上安装Zabbix代理程序 在远程主机上安装Zabbix代理程序。安装方式取决于操作系统&#xff0c;可以从Zabbix官网上下载相应的安装包进行安装。 监控agent1 在agent1上安装agent yum install zabbix-agent另外在zabbix server上要关闭防火…

【前端知识】内存泄漏与垃圾回收机制 (上)

【前端知识相关分享】内存泄漏与垃圾回收机制 &#xff08;上&#xff09; 1. 内存的生命周期1.1 内存生命周期的一般流程1.2 C&#xff0c;JS和python内存分配和释放的区别 2. JS中的内存管理2.1 两种数据类型与两种内存一个思考2.2 两种内存空间的区别对比 3. 内存泄漏的定义…

HMM理论学习笔记-隐马尔可夫模型的三个元素、假设和问题

文章目录 概率论基础条件概率全概公式边缘概率联合概率联合概率与边缘概率的关系贝叶斯公式&#xff08;条件联合概率&#xff09;马尔科夫链的概念 HMM简述HMM的三个元素符号定义1、状态转移概率矩阵A2、观测概率矩阵B3、初始状态概率向量π HMM的三个假设1、齐次马尔可夫假设…

netstat命令解析

一、linux系统中netstat命令的帮助信息 └──╼ $netstat -h usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}netstat [-vWnNcaeol] [<Socket> ...]netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }-r, --route …

VMware12安装图解

目录 一、介绍VMware虚拟机 二、安装VMware12虚拟机 三、VMware虚拟机内部新建虚拟机 清理磁盘 一、介绍VMware虚拟机 VMware是一个虚拟机。 什么是虚拟机&#xff1f;字面意思‘虚拟’&#xff0c;那就不算是真的&#xff1b;‘机’可以理解为一台电脑或者一个电脑系统。…

SimpleDateFormat以及Date的使用

Date Date currentTime new Date(); 获取当前的时间 输出&#xff1a; System.out.println(currentTime); 就会以这样的格式输出 那我们不想要这样的格式&#xff0c;而是输出格式怎么办呢&#xff1f; SimpleDateFormat闪亮登场 食用方法&#xff1a; SimpleDateForma…

前端埋点采集到的数据怎么发送到服务端?

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 1. Image请求 2. Ajax请求 3. WebSocket 连接 1. Image请求 1. 通过 Image请求将采集的数据发送到服务器。这种方式比较适合少量数据的采集&#xff0c;因为 lmage请求不需要返回任何数据…

【Python】中文乱码问题与解决方案 深入分析

一直以来&#xff0c;python中的中文编码就是一个极为头大的问题&#xff0c;经常抛出编码转换的异常&#xff0c;python中的str和unicode到底是一个什么东西呢&#xff1f; 在本文中&#xff0c;以哈来解释作示例解释所有的问题&#xff0c;“哈”的各种编码如下&#xff1a; …

数据库单实例升级

一、单实例环境,全时长二个半钟多。详细图文说明到这下载 1、停止所有oracle相关进程。 Emctlstop dbconsole Isqlplusctl stop Lsnrctl stop sqlplus /nolog sql>conn /as sysdba Connectedtoanidleinstance. sql>shutdown 然后&#xff0c;冷备份下数据库cp…

c++学习之运算符重载详解

目录 1.运算符重载的基本概念 2.重载加法运算符 3.重载运算符<<(全局函数实现) 4.重载>>&#xff08;输入&#xff09;运算符&#xff08;全局函数实现&#xff09; 5. 重载/--运算符 6.重载运算符 7.可以重载的运算符 1.运算符重载的基本概念 运算符重载&…

研读Rust圣经解析——Rust learn-16(高级trait,宏)

研读Rust圣经解析——Rust learn-16&#xff08;高级trait&#xff0c;宏&#xff09; 高级trait关联类型Type为什么不用泛型而是Type 运算符重载&#xff08;重要等级不高&#xff09;重名方法消除歧义never typecontinue 的值是 ! 返回闭包 宏自定义宏&#xff08;声明宏&…

day7 实现TCP通信

目录 函数介绍 代码实现 函数介绍 socket函数与通信域&#xff1a; #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); -domain&#xff1a;指定通信域&#xff08;通信地址族&#xff09;&#xff1b; AF_I…

python-chatgpt自动化批量改写文章-基于gpt-3-5-turbo模型

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、ChatGPT官方文档介绍&#xff1a; ChatGPT API—0.002美元&#xff0c;1000个token。比之前的GPT-3.0&#xff0c;成本直接降低了9…

vue3.2+ts错误:找不到模块“./App.vue”或其相应的类型声明。ts(2307)

报错原因&#xff1a; 未定义 .vue文件的类型&#xff0c;导致 ts 无法解析其类型&#xff0c;在vite-env.d.ts中定义后即可解决。 解决方法&#xff1a; 找到项目src目录下的vite-env.d.ts 文件&#xff0c;追加以下内容&#xff1a; declare module "*.vue" {impor…

【Python】chinese_calendar包的介绍和使用案例介绍(含代码)

一、问题引入 在我们的比赛中,我们对应的有时间数据,我们需要考虑不同时间段(例如月头、月中、月末等)产品需求量有何特性,节假日对产品需求量的影响,促销(如618、双十一等)对产品需求量的影响,季节因素对产品需求量的影响等。 但是我们的数据集中,却没有这种相关的…