shell基础(五)for循环及循环终止命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell基础(五)for循环及循环终止命令相关的知识,希望对你有一定的参考价值。

参考技术A 例一:

效果如图:

开发shell脚本实现服务器临时配置多个IP,并且可以随时撤销配置的所有IP.IP的地址范围为:10.0.2.1~10.0.2.16,其中10.0.2.10不能配置

效果如下:

已知下面字符串是将RANDOM随机数采用md5sum加密后任意取出的连续10位结果,请破解这些字符串对应的md5sum前对的字符串的数字?
"4fe8bf20ed"

效果如图:

例一:
使用循环批量输出数组的元素

例二:通过竖向列举法定义数组元素批量打印

结果如图:

例三:
将命令结果作为数组元素定义并打印

结果如图:

利用for循环打印下面这句话不大于6的单词
I am lodboy teacher welcome to oldboy training class

检测多个网站地址是否正常
要求:
1)使用shell数组的方法实现,检测策略尽量使用模拟用户访问
2)每10秒进行一次全部检测,无法访问的输出报警
3)待检测的地址如下
http://www.baidu.com
http://www.sina.com
http://www.qq.com
http://www.1.com

效果如图:

shell脚本编程基础之for循环

循环结构

循环需要有进入条件和退出条件,如果没有退出条件,则就会一直循环下去

for 变量 in 列表;do
  循环体
done

生成列表及示例

{1..100}:生成1到100的整数列表
`command`:使用命令生成列表

Example1:
#!/bin/bash
#
declare -i SUM=0              #指明SUM变量是一个整数型变量;变量的值为整数;指定求和变量的初始值为0

for I in {1..100};do
   let SUM=$[$SUM+$I]        #指定SUM变量是一个整数型变量
done
echo "the sum number is: $SUM"
把列表里面的1赋值给变量I,SUM变量的初始值为0,所以SUM变量的值为$SUM+$I,SUM=0+1=1;当I=2时,SUM的值为$SUM+$I=1+2=3,以此类推,退出循环的条件为I为100时,列表已经没有元素,退出循环,最后打印SUM的值,从1+2+3..100

Example2:
#!/bin/bash
declare -i SUM=0
declare -i SUMS=0
for i in {1..10};do
   NUM=$[$i%2]
   if [ $NUM -eq 0 ];then
       let SUM=$[$SUM+$i]
   else
       let SUMS=$[$SUMS+$i]
   fi
done
echo "even is: $SUM"
echo "odd is: $SUMS"
计算100以内的奇数和偶数的和各是多少

Example3:
#!/bin/bash
declare -i SUM=0
for I in {1..100};do
   SUMS=$[$I%3]
   if [ $SUMS -eq 0 ];then
       SUM=$[$SUM+$I]
   fi
done
echo "$SUM"
计算100以内,3的倍数的数相加的和

Example4:
#!/bin/bash
if [ $# -lt 1 ];then
   echo "Parameters not empty"
   exit 8                               #必须指定exit,如果不添加exit,执行完这个判断之后还会继续执行下面的判断
fi

if [ $1 == ‘--add‘ ];then
   for i in {1..10};do
       if ! id user$i &>/dev/null;then
           useradd user$i
           echo "user$i" | passwd --stdin user$i &>/dev/null
           echo "add user$i finished"
       else
           echo "user$i exists"
       fi
   done
elif [ $1 == ‘--del‘ ];then
   for i in {1..10};do
       if id user$i &>/dev/null;then
           userdel -r user$i
           echo "Delete user$i finished"
       else
           echo "no such user"
       fi
   done
else
   echo "Input error"
   exit 10
fi
循环添加10个用户或者删除10个用户

Example5:
#!/bin/bash
if [ $1 == ‘--add‘ ];then
   for i in `echo "$2" | sed -n ‘s/,/ /gp‘`;do       #sed后面必须加g选项,否则只搜索替代第一个,加上g是全局搜索替代
       if id $i &>/dev/null;then
           echo "$i exists"
       else
           useradd $i
           echo "$i" | passwd --stdin $i &>/dev/null
           echo "add $i finished"
       fi
   done
elif [ $1 == ‘--del‘ ];then
   for i in `echo "$2" | sed -n ‘s/,/ /gp‘`;do
       if id $i &>/dev/null;then
           userdel -r $i
           echo "delete $i"
       else
           echo "$i not exists"
       fi
   done
else
   echo "unknow options"
fi
通过--add xxx,xxx,xxx进行自定义添加和删除用户

组合条件测试

-a:与关系
-o:或关系
!:非关系

Example:
[ $# -gt 1 -a $# -le 3 ]
[ $# -gt 1 ] && [ $# -le 3 ]

德·摩根定律

技术图片

非(A 且 B) = (非 A) 或 (非 B)
非(A 或 B) = (非 A) 且 (非 B)

Example:
#!/bin/bash
declare -i MAX=0
declare -i MIN=0

for i in {1..10};do
   MYRAND=$RANDOM          #需要把RANDOM变量生成的随机数保存到另一个变量中,如果不保存,最下面的判断成立,会给MAX、MIN赋值一个新的随机数
   [ $i -eq 1 ] && MIN=$MYRAND       #MIN只需要参与一次循环,如果不加限制条件,MIN会参与10次循环,这样随机数会一直等于MIN,而不会小于
   if [ $i -le 9 ];then
       echo -n "$MYRAND,"      #-n表示取消换行符
   else
       echo "$MYRAND"
   fi
   [ $MYRAND -gt $MAX ] && MAX=$MYRAND    #添加判断条件;如果MYRAND的值大于MAX值,则MAX的值为MYRAND的值          
   [ $MYRAND -lt $MIN ] && MIN=$MYRAND    #如果MYRAND的值小于MIN的值,则MIN的值为MYRAND的值
done
echo "$MAX,$MIN"
循环10次,生成10个随机数,取出其中的最大最小值

以上是关于shell基础(五)for循环及循环终止命令的主要内容,如果未能解决你的问题,请参考以下文章

Shell ❀ 循环语句

Shell ❀ 循环语句

Shell ❀ 循环语句

Shell基础:使用for循环结构使用while循环结构基于case分支编写脚本使用Shell函数中断及退出

shell循环语句

Shell脚本------循环语句(for,while,until循环语句)