【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