• linux——shell编程:循环


    一、语法

    1、for:

    • 写法1:
    for 变量名 in 列表;do
    	循环体
    done
    
    • 写法2:
    for((i=1;判断条件;i++));do
    	循环体
    done
    

    2、while:

    while 条件判断;do
    	循环体
    done
    

    二、循环中断:

    • continue :跳过本次循环,不继续往下执行,直接进入下次循环,continue+数字,可以跳过出多层嵌套
    • break:直接跳出当前循环

    三、shfit:

    每次执行,都会把脚本参数中的第一个弹出。

    四、循环列表:

    • 直接写出列表:
    • 命令生成
      • {1..10},{a..z}
      • seq命令:
    • 返回列表的命令:$(ls /data),`ls /data`
    • 使用glob:例如:*.sh
    • 引用变量:$@,$,(脚本中,“$@”,参数独立显示,“$”为参数数组)

    五、示例:

    1、for:

    1.1、1..100求和:
    #!/bin/bash
    #写法1:
    declare -i sum=0 #声明int变量
    for i in {1..100};do
       let sum+=i
    done
    echo sum=$sum
    
    #写法2:
    sum = 0
    for ((i=1;i<=100,i++));do
    	let sum+=i
    done
    echo sum=$sum
    
    1.2、1..100奇数求和:
    #!/bin/bash
    declare -i sum=0 #声明int变量
    for i in {1..100};do
    	if [ $[i%2] -eq 1 ];then
    		let sum+=i
    	fi
    done
    echo sum=$sum
    
    1.3、批量添加用户:
    1、创建用户名文件
    pi@raspberrypi:~/data $ cat userlist.txt
    ifranc
    baook
    aston
    kkoo
    shuaiguo
    
    2、脚本
    #!/bin/bash
    #添加10个用户,创建随机密码
    for user in `cat ./userlist.txt`;do
    	pass=`tr -dc '[:alnum:]' < /dev/urandom | head -c 8` #获取随机8位数字作为密码
    	useradd $user &> /dev/null
    	echo "$user:$pass" | tee -a useradd.log | chpasswd  #设置密码,将用户:密码写入文件
    	passwd -e $user
    	echo "User:$user is created"
    done
    
    1.4、将全部文件后缀修改为.abc:
    #!/bin/bash
    #修改文件夹内所有文件的扩展名为.abc
    #设置目标文件目录
    dir="/home/pi/data/test"
    for file in `ls $dir`;do
    	mv $dir/$file $dir/$(echo $file | sed -r 's/(.*).(.*)/1.abc/')
    done
    
    1.5、并行扫描指定网段内开机主机:
    #!/bin/bash
    Network=192.168.1
    for HostID in {1..254};do
    	{
    		if ping -c1 -W1 $Network.$HostID &> /dev/null ;then
    			echo $Network.$HostID is up | tee -a hostlist.txt
    		fi
    	} &   #{内程序并行运行}
    done
    wait #光标自动跳到命令行
    
    1.6、九九乘法表:
    #!/bin/bash
    for i in {1..9};do
    	for j in `seq $i`;do
    		echo -e "$j*$i=$[j*i] 	c"  #	 table c 不换行
    	done
    	echo #换行
    done
    
    1.7打印三角形:image-20200319204341072
    #!/bin/bash
    read -p "Please in put line-->" line
    for((i=1;i<=line;i++));do
    	for((j=line-1;j>=i;j--));do
    		echo -e " c"
    	done
    	for((k=1;k<=i*2-1;k++));do
    		echo -e "+c"
    	done
    	echo
    done
    

    2、while:

    2.1、循环10次随机数,打印最大值和最小值
    #!/bin/bash
    i=0
    max=
    min=
    while [ $i -lt 10 ];do
      tem=$RANDOM
      echo $tem
      if [ ! $max ];then
          max=$tem;min=$tem
    
      else
          if [ $tem -gt $max ];then
              max=$tem
          elif [ $tem -lt $min ];then
              min=$tem
          fi
      fi
      let i++
    done
    echo Max=$max, Min=$min
    
    特殊用法:
    2.2、read配合while,利用管道输入:
    [root@VM_0_17_centos ~]# echo a b c | while read x y z;do echo x=$x,y=$y,z=$z;done
    x=a,y=b,z=c
    
    2.3、读取文件重定向读取每行内容:
    [root@VM_0_17_centos data]# cat f.txt 
    1 2 3
    a b c
    zz dd kk
       sd  fd             gse       #空格个数无所谓
    [root@VM_0_17_centos data]# cat f.txt | while read x y z;do echo x=$x,y=$y,z=$z;done
    x=1,y=2,z=3
    x=a,y=b,z=c
    x=zz,y=dd,z=kk
    x=sd,y=fd,z=gse
    
  • 相关阅读:
    Reversion windows 2008 R2 STD to Datacenter
    NetAPP常用操作
    firefox解决flash崩溃
    物理和虚拟兼容性RDM的区别
    网络嗅探器Wireshark
    子网掩码在线计算换算及算法
    Debian中文字体安装
    快算24点,POJ(3983)
    第九十八周,搜索24点
    两次DFS,POJ(1481)
  • 原文地址:https://www.cnblogs.com/franc/p/12520167.html
Copyright © 2020-2023  润新知