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


一、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

编写能够自动生成一个6位随机密码的脚本

#!/bin/bash
str=1234567890
for i in {1..6}       字符串的长度
do
a=$[RANDOM % ${#str}]
tmp=${str:a:1}     对字符串进行分片
passwd=$passwd$tmp  正排     passwd=$tmp$passwd 倒排
done
echo "生成6位数的随机密码为:$passwd " 

使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数

#!/bin/bash
read -p "请输入一个0 ~ 255的整数" num
for i in {1..8}
do
a=$[ num % 2 ]$a   得到一个余数
let num=$[num / 2]
done
echo $a

进行减法正排,10进制转换2进制

#!/bin/bash
read -p "请输入一个0 ~ 255的整数" num
for i in {128.64.32.16.8.4.2.1}
do
NUM=$[num - i]
if [ $NUM -lt 0 ]
then
echo -n 0
else
echo -n 1
let num=$[num - i]
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

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值