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

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

目录

  • 一、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.kler.cn/a/15286.html

相关文章:

  • MySQL索引的底层实现原理是什么?
  • 已有docker增加端口号,不用重新创建Docker
  • 【EasyExcel】复杂导出操作-自定义颜色样式等(版本3.1.x)
  • 自动化运维-检测Linux服务器CPU、内存、负载、IO读写、机房带宽和服务器类型等信息脚本
  • 机器学习基础04
  • 找不到vcruntime140.dll怎么办,彻底解决vcruntime140.dll丢失的5种方法
  • 换肤实现及LayoutInflater原理
  • Linux系统操作案例
  • DFS与BFS总结
  • 学成在线笔记+踩坑(9)——课程发布,xxl-job+消息SDK实现分布式事务、页面静态化、Hystrix熔断降级
  • 数据可视化开源工具软件
  • 一起Talk Android吧(第五百四十一回:ProgressBar总结)
  • C++原理高性能
  • ERP与CRM、MRP、PLM、APS、MES、WMS、SRM的关系
  • PMO和PM必备六大复盘方法工具汇总
  • MiNiGPT4安装记录
  • 黑盒测试过程中【测试方法】详解5-输入域,输出域,猜错法
  • ERTEC200P-2 PROFINET设备完全开发手册(4-1)
  • 解析Mybaits核心配置文件属性
  • 大数据 | 实验二:文档倒排索引算法实现
  • 前苹果设计总监创办,Humane想用AI+AR界面取代手机
  • 【unity项目实战】3DRPG游戏开发05——动画、画质优化和shader的使用
  • 服装店铺装修有哪些窍门?做好这3点,顾客主动上门
  • 必须要知道的hive调优知识(下)
  • 微服务探索:nuoyi
  • ubuntu18.04 配置zlmediakit 支持ffmpeg转码记录