shell脚本编程之循环控制结构

本文详细介绍了Shell脚本中的循环控制结构,包括for循环的不同语法形式及其应用场景,例如遍历文件、处理用户信息和计算数值等。同时,还提供了实际的例子帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                        shell脚本编程之循环控制结构

循环控制之for循环

     语法结构1

         for  Variable  in List

         do

             commands

         done

     语法结构2

         for  Variable  in List;do

             commands

         done

这个List可以为列表、变量、命令 等等

  for循环    事先提供一个元素列表,而后,使用变量去遍历此元素列表,每访问一个元素,就执行一次循环体,直到元素访问完毕


1、for循环中的List为列表

eg1:   显示/etc/inittab, /etc/rc.d/rc.sysinit, /etc/fstab三个文件各有多少行;

1
2
3
4
5
#!/bin/bash
for  File  in  /etc/inittab  /etc/rc .d /rc .sysinit  /etc/fstab ; do
  Row=` wc  -l $File |  cut  -d ' '  -f1`
echo  "$File has: $Row rows"
done

运行结果  

151201266.png


2、for循环中的List为变量

eg2:显示当前ID大于500的用户的用户名和id;

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
useradd  user1
useradd  user2
useradd  user3    #新建几个用户便于测试结果
Id=` cat  /etc/passwd  awk  -F:  '{print $3}' `
for  Var  in  $Id; do
if  [ $Var - ge  500 ]; then
   User=` grep  "$Var\>"  /etc/passwd  cut  -d: -f1`
   echo  "$User uid is $Var"
fi
done

运行结果  

154846880.png

3、for循环中的List为命令

eg3:显示当前shell为bash的用户的用户名和shell。

显示结果为 Bash user:root,/bin/bash

分析:先通过以bash结尾的shell来确定用户,然后把这些用户一个一个的输出

1
2
3
4
5
6
7
8
#!/bin/bash
for  Var  in  ` grep  "bash\>"  /etc/passwd  cut  -d: -f7`; do
User=` grep  "$Var"  /etc/passwd  | cut  -d: -f1`
done
Shell=` grep  "bash\>"  /etc/passwd  | cut  -d: -f7 | uniq `
for  name  in  $User; do
echo  "Bash user:$name,$Shell"
done

运行结果

161840990.png


4、for循环中的List为一连串的数字

eg4:分别计算1-100以内偶数(Even number)的和,奇数(Odd number)的和.

分析:当一个数与2取余用算时,为1则表示该数为奇数,反之为偶数。

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
EvenSum=0
OddSum=0
for  in  ` seq  1 100`; do
   if  [ $[$I%2] - eq  1 ];  then
     OddSum=$[$OddSum+$I]
   else
     EvenSum=$[$EvenSum+$I]
   fi
done
echo  "EvenSum: $EvenSum."
echo  "OddSUm: $OddSum."

运行结果

162821665.png


5、C语言格式的for循环

eg5:添加用户从user520添加到user530,且密码与用户名一样。

1
2
3
4
5
6
#!/bin/bash
for  ((i=520;i<=530;i++)); do
useradd  user$i
echo  "Add user$i."
echo  user$i |  passwd  -stdin user$i &> /dev/null
done

运行结果:(可以切换一个用户试试密码是否和用户名一样)

163851429.png


其他循环的格式如下,所有这些循环熟练掌握一种循环即可。

while循环命令的格式

      while test command

      do

             other command

      done


until循环的命令格式

    until test command

    do

          other command

    done



一个脚本的面试题 ,各位博友可以把您的答案回复在下面(大家一起交流)

    通过传递一个参数,来显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。

运行如  bash eg.sh  bash则显示结果如下

BASH,3users,they are:

root,redhat,gentoo,

运行如 bash eg.sh  nologin则显示结果如下

NOLOGIN, 2users, they are:

bin,ftp,










本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1253893,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值