shell——循环语句(for循环、while循环、until循环)

循环语句

  • 一、使用for循环语句
    • 1.1 for语句结构
    • 实验:
      • 1、输出10个数
      • 2、批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码为123456,验证脚本
      • 3、根据ip地址检查主机状态,ip地址存放在ipadds.txt文件中,每行一个,使用ping命令检测各主机的连通性
      • 4、1到100的偶数和
      • 5、1到100的奇数和
  • 二、使用while循环语句
    • 实验
      • 1、输出1到20的数
      • 2、添加用户,用户名以stu开头,按数字编号
      • 2、输出不能被三整除的数
  • 三、双重循环
      • 1、九九乘法表
      • 2、直角三角形
      • 3、等腰三角形
  • 四、使用until循环语句
    • 实验
      • 1、计算1~50的和值
      • 2、为指定用户发送在线消息

一、使用for循环语句

1.1 for语句结构

读取不同的变量值,用来逐个执行同一组命令
for语句结构

for 变量名 in 取值列表
do
 命令序列
done

shell——循环语句(for循环、while循环、until循环)_第1张图片
++ 自身变量+1
– 自身变量-1
+=5 自身变量+5
-=5 自身变量-5
*=5 自身变量*5
/=5 自身变量/5
%=5 自身变量%5
Let sum+=$1 两个用法一样 ((sum+=$1))
$()与``都是运算,命令替换
${}跟变量
$[]与(())整数运算
[]判断

实验:

1、输出10个数

#!/bin/bash
for ((i=1;i<=10;))
do
  echo $i
  let i++
done

#!/bin/bash
for ((;;))
do
  if [ $i -le 10 ];then 
  echo $i
  let i++
  else
     break  //退出当前循环
  fi 
done
#!/bin/bash
for ((;;))
do
 if [ $i -le 10 ];then 
  echo $i
  let i++
  else
  exit 0/1  //退出应用程序      0正常退出,1异常退出,返回的状态值
  fi 
done

echo $?

2、批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码为123456,验证脚本

#!/bin/bash
list=$(cat /opt/users.txt)  //定义集合
for user in $list   //遍历创建用户
do
    useradd $user      //添加用户
    echo "123456" | passwd --stdin $user
    echo "创建$user成功"
done   

3、根据ip地址检查主机状态,ip地址存放在ipadds.txt文件中,每行一个,使用ping命令检测各主机的连通性

#!/bin/bash
list=$(cat /opt/ipaddr.txt)
for IP in $list
do
  ping -c 3 -i 0.2 -W 3 $IP > /dev/null
  if [ $i -eq 0 ];then
    echo "${IP} is up"
  else
    echo "${IP} is down"
  fi
done
echo “最终i的值是:$i

4、1到100的偶数和

#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do 
if [ `expr $i % 2` -eq 0 ];then
 let sum=$sum+$i
fi
done
echo "$sum"#!/bin/bash
sum=0
for ((i=0;i<=100;i+=2))
do
 let sum+=$i
done
echo "$sum"

5、1到100的奇数和

#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do 
if [ `expr $i % 2` -eq 1 ];then
 let sum+=$i(或者let sum=$sum+$i)
fi
done
echo "$sum"
或者
#!/bin/bash
sum=0
for ((i=1;i<=100;i+=2))
do
 let sum+=$i
done
echo "$sum"

二、使用while循环语句

重复测试某个条件,只要条件成立则反复执行

while语句结构

while 条件测试操作
do
	命令序列
done

shell——循环语句(for循环、while循环、until循环)_第2张图片
break 退出本层循环
continue 跳过continue以下语句直接进入下一次循环

实验

1、输出1到20的数

#!/bin/bash
while [ $i -le 20 ]
do
    echo $i
    let i++
done 

2、添加用户,用户名以stu开头,按数字编号

一共添加20个用户,stu1,stu2…stu20
初始密码123456

#!/bin/bash
name="stu"
i=1
while [ $i -le 20 ]
do
useradd ${name}${i}
echo "123456" | passwd --stdin ${name}${i}
let i++
done 

2、输出不能被三整除的数

#!/bin/bash
i=1
while [ $i - le 100 ]
do 
 if [ `expr $i % 3`  != 0 ];then
 echo $i
 fi
let i++
done

三、双重循环

外层循环执行一次,内层循环执行一遍

1、九九乘法表

#!/bin/shell
for ((i=1;i<=9;i++))
do
    for((j=1;j<=i;j++))
    do
      echo  -n  "$i*$j= `echo $(($i*$j))` "
    done
    echo " "
don

2、直角三角形

#!/bin/bash
read -p "Please input the length: " len
for i in `seq 1 $len`
do
    for((j=1;j<=$i;j++))
    do
       echo -n "* "
      done
    echo
done

shell——循环语句(for循环、while循环、until循环)_第3张图片

3、等腰三角形

#!/bin/bash
for ((i=1;i<=5;i++))
do
  for ((j=5;j>=i;j--))  //倒直角三角形
  do
     echo -n " "
  done
  for((k=1;k<=2*i-1;k++)) //等腰三角形
  do
     echo -n "*"
  done
  echo ""
done

shell——循环语句(for循环、while循环、until循环)_第4张图片

四、使用until循环语句

重复测试某个条件,只要条件不成立则反复执行

until 条件测试操作
do
   命令序列
done

shell——循环语句(for循环、while循环、until循环)_第5张图片

实验

1、计算1~50的和值

#!/bin/bash
i=1
until [ $i -eq 51 ]
do 
    echo $i
    sum=$sum+$i
    let i++
done
echo $sum

2、为指定用户发送在线消息

若用户不在线,则每10分钟试一次,直至用户登录系统后在发送信息
用户名与消息通过位置参数传递给脚本

1:位置参数个数大于1
2:姓名属于系统用户 /etc/passwd
3:用户是否在线 until who 
4:发送消息echo “消息” | write 用户名
#!/bin/bash
username=$1
#格式参数不能为空
if [ $# -lt 1 ];then
    echo "Usage:`basename $0`  []"
    exit 1
fi
#验证是否属于系统用户
if grep "^$username" /etc/passwd > /dev/null;then :
else
    echo "not user"
    exit 2
fi
#测试用户是否在线,如果不在线,每5s联系一次
until who | grep "$username" > /dev/null;do
    echo "user not login"
    sleep 5
done
#发送消息
echo "$2" | write "$username"
echo "${username}发送成功"

你可能感兴趣的:(shell脚本,for循环,while循环,until循环,双重循环,shell)