首页 > 其他分享 >流程控制、循环语句和随机数

流程控制、循环语句和随机数

时间:2023-05-23 15:56:51浏览次数:40  
标签:语句 RANDOM% ip 流程 echo 循环 command 随机数 done

一、流程控制语句

流程判断1

image

if [ condition ];then
	command
	command
fi

[ 条件 ] && command

流程判断2

image

if [ condition ];then
	command1
else
	command2
fi

[ 条件 ] && command1 || command2

流程判断3

image

if [ condition1 ];then
	command1  结束
elif [ condition2 ];then
	command2   结束
else
	command3
fi
注释:
如果条件1满足,执行命令1后结束;如果条件1不满足,再看条件2,如果条件2满足执行命令2后结束;如果条件1和条件2都不满足执行命令3结束.

流程判断4

image

if [ condition1 ];then
	command1
	if [ condition2 ];then
		command2
	fi
else
	if [ condition3 ];then
		command3
	elif [ condition4 ];then
		command4
	else
		command5
	fi
fi
注释:
如果条件1满足,执行命令1;如果条件2也满足执行命令2,如果不满足就只执行命令1结束;
如果条件1不满足,不看条件2;直接看条件3,如果条件3满足执行命令3;如果不满足则看条件4,如果条件4满足执行命令4;否则执行命令5

二、循环语句

循环控制:
循环体:do....done之间的内容
- continue:继续;表示循环体内下面的代码不执行,重新开始下一次循环
- break:打断;马上停止执行本次循环,执行循环体后面的代码
- exit:表示直接跳出程序

1、for循环

1.1 列表循环

列表for循环:用于将一组命令执行已知的次数

for variable in {list}
     do
          command
          command
          …
     done
或者
for variable in a b c
     do
         command
         command
     done

1.2 不带列表循环

不带列表的for循环执行时由用户指定参数和参数的个数

for variable
    do
        command
        command
        …
   done

1.3 类C风格的for循环

for(( expr1;expr2;expr3 ))
    do
        command
        command
        …
   done
for (( i=1;i<=5;i++))
    do
        echo $i
   done

expr1:定义变量并赋初值
expr2:决定是否进行循环(条件)
expr3:决定循环变量如何改变,决定循环什么时候退出

练习:局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里。

以10.1.1.1~10.1.1.10为例
#!/bin/bash
#定义变量
ip=10.1.1
#循环去ping主机的IP
for ((i=1;i<=10;i++))
do
	ping -c3 $ip.$i &>/dev/null
	if [ $? -eq 0 ];then
		echo "$ip.$i is ok" >> /tmp/ip_up.txt
	else
		echo "$ip.$i is down" >> /tmp/ip_down.txt
	fi
	或者
	[ $? -eq 0 ] && echo "$ip.$i is ok" >> /tmp/ip_up.txt || echo "$ip.$i is down" >> /tmp/ip_down.txt
done

并行执行:
{程序}&表示将程序放到后台并行执行,如果需要等待程序执行完毕再进行下面内容,需要加wait
#!/bin/bash
#定义变量
ip=10.1.1
#循环去ping主机的IP
for ((i=1;i<=10;i++))
do
{

        ping -c1 $ip.$i &>/dev/null
        if [ $? -eq 0 ];then
                echo "$ip.$i is ok" >> /tmp/ip_up.txt
        else
                echo "$ip.$i is down" >> /tmp/ip_down.txt
        fi
}&
done
wait
echo "ip is ok...."

2. while循环

条件为真就进入循环;条件为假就退出循环

while 表达式
  do
     command
     command
     ...
 done

举例说明

用while循环计算1-50的偶数和
#!/bin/bash
#定义变量
sum=0
i=2
#循环打印1-50的偶数和并且计算后重新赋值给sum
while [ $i -le 50 ]
do
	let sum=sum+i
	let i+=2
done
#打印sum的值
echo "1-50的偶数和为:$sum"

3.until循环

条件为假就进入循环;条件为真就退出循环

until 表达式
do
	command
	command
	...
done

举例说明

使用until语句批量创建10个用户,要求stu1—stu5用户的UID分别为1001—1005;stu6~stu10用户的家目录分别在/rhome/stu6—/rhome/stu10
#!/bin/bash
i=1
until [ $i -gt 10 ]
do
	if [ $i -le 5 ];then
		useradd -u $[1000+$i] stu$i && echo 123|passwd --stdin stu$i
	else
		[ ! -d /rhome ] && mkdir /rhome
		useradd -d /rhome/stu$i stu$i && echo 123|passwd --stdin stu$i		
	fi
let i++
done

三、随机数

bash默认有一个$RANDOM的变量,默认是0~32767。
使用set |grep RANDOM 查看上一次产生的随机数
echo $RANDOM

产生0~1之间的随机数
echo $[$RANDOM%2]

产生0~2之间的随机数
echo $[$RANDOM%3]

产生0~3之间的随机数
echo $[$RANDOM%4]
。。。。
产生0~9内的随机数
echo $[$RANDOM%10]

产生0~100内的随机数
echo $[$RANDOM%101]

产生50-100之内的随机数
echo $[$RANDOM%51+50]

产生三位数的随机数
echo $[$RANDOM%900+100]

举例说明

产生一个phonenum.txt文件,随机产生以139开头的手机号1000个,每个一行。
#!/bin/bash
# random phonenum
# 循环1000次产生电话号码并保存到文件
for i in {1..1000}
do
	n1=$[RANDOM%10]
	n2=$[RANDOM%10]
	n3=$[RANDOM%10]
	n4=$[RANDOM%10]
	n5=$[RANDOM%10]
	n6=$[RANDOM%10]
	n7=$[RANDOM%10]
	n8=$[RANDOM%10]
	echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done

在上面的1000个手机号里抽奖5个幸运观众,显示出这5个幸运观众。但只显示头3个数和尾号的4个数,中间的都用*代替
#!/bin/bash
#定义变量
phone=/shell04/phonenum.txt
for ((i=1;i<=5;i++))
do
	#定位幸运观众所在行号
	line=`wc -l $phone |cut -d' ' -f1`
	luck_line=$[RANDOM%$line+1]
	#取出幸运观众所在行的电话号码
	luck_num=`head -$luck_line $phone|tail -1`
	#显示到屏幕
	echo "139****${luck_num:7:4}"
	echo $luck_num >> luck.txt
	#删除已经被抽取的幸运观众号码
	sed -i "/$luck_num/d" $phone
done

标签:语句,RANDOM%,ip,流程,echo,循环,command,随机数,done
From: https://www.cnblogs.com/chunjeh/p/17425354.html

相关文章

  • JavaScript正则获取a标签中的path路径值-流程引擎-计算引擎
    直接上代码://获取附件中的链接地址functionget_file_path_from_encode_value(x){vararrLink=[];x.replace(/<a[^>]*path=['"]([^'"]+)[^>]*/gi,function(match,capture){arr......
  • 【MySQL】MySQL执行一条 select 语句,期间发生了什么?
    1  前言我们学习SQL的时候,大家肯定第一个先学到的就是select查询语句了,比如下面这句查询语句://在product表中,查询id=1的记录select*fromproductwhereid=1;但是有没有想过,MySQL执行一条select查询语句,在MySQL中期间发生了什么?带着这个问题,我们可以......
  • .net6中数据库查询报错:'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无
    错误语句:在数据库查询中使用skip()问题原因:数据库版本为SQLServer2008,不支持'Fetch'和'Next'语句SQLServer2012及后续版本才支持相关语句解决方法:1.引用包: System.Data.SqlClient和EntityFrameworkCore.UseRowNumberForPaging2.使用:在Program.cs中调整数据库连接bu......
  • flowable动态创建多级流程模板
    flowable动态创建多级流程模板引入Maven依赖<dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter</artifactId><version>6.6.0</version></dependency>动态创建流程节点工具类/***动态创......
  • 文心一言 VS chatgpt (21)-- h264编码一帧数据的流程是怎样的?
    h264编码一帧数据的流程是怎样的?文心一言:H.264编码将一帧数据分成多个块,其中每个块可以单独进行编码。编码的过程包括预测、变换和量化等步骤。具体流程如下:1.帧内预测:对一帧视频进行编码,首先对当前块进行帧内预测。帧内预测使用已经编码的相邻块来预测当前块的值。2.帧间预......
  • springmvc的流程及简单案例
    springmvc概念JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。SpringMVC是一种轻量级的、基于MVC的Web层应用框架,它属于Spring框架的一部分。SpringMVC说......
  • 基本的select语句
    1.SQL的分类DDL:数据定义语言:create\alter\drop\rename\truncateDML:数据操作语言:insert\delete\update\select(重中之重)DCL:数据控制语言:commit\rollback\savepoint\grant\revoke......
  • uboot核内核启动流程
    bootloader启动流程和功能说明bootloader基本功能说明有的程序在启动bootloader之前会运行一段固化程序bootloader启动过程分单阶段和多阶段多阶段可以提供更复杂的功能和更好的移植性一般从固态存储设备启动分两个阶段第一个阶段bootloader启动说明源码U-boot/ar......
  • 【vue流程编辑器框架】Vue-Flowchart-Editor
    前言:不管是OA系统常见的审批流程图还是业务流程图,前端经常会遇到一些流程编辑器的业务场景,分享一个我举得好用的vue组件:Vue-Flowchart-Editor:一个基于Vue的流程图编辑器组件,支持创建、编辑和展示流程图,具有可拖拽节点、连接线、自动布局等功能。 官网地址:https://git......
  • < Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!
    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。这是系列第三篇,在这篇文章中我们将全面深入地......