Linux shell(三)

本文深入讲解了Shell脚本中break和continue命令的使用方法,包括如何控制单层或多层循环的执行流程,以及如何利用这些命令进行特定任务的处理。

下面来学习一下break和continue命令,其实和C语言Java的语法类似对比记忆就好:

1:break命令

   break命令是退出循环的一个简单方法,可以用break命令来退出任意类型的循环,包括while和until循环

     a:跳出单个循环

在shell执行break命令时候,它会尝试跳出当前正在执行的循环。

eg:

#!/bin/bash
for var in 1 2 4 5 6 7
do 
    if [ $var -eq 5 ]
    then
        break
    fi
    echo " number : $var"
done
echo "the for loop is completed"
这段代码它会输出5以前的数字然后退出循环,这是有一层循环的时候,如果是二层循环的时候呢?

b:跳出内部循环

当出现二层循环的时候

break命令会自动终止你所在的最内层的循环

eg:

#!/bin/bash
for ((a = 1;a < 5;a++))
 do 
   echo "outer loop $a"
    for((b=1;b<10;b++))
    do
         if [ $b -eq 5 ]
         then 
                 break
         fi
         echo " inner loop :$b"
    done
done
当b自增到5的时候,break命令会终止该层循环:注意虽然内部循环遇到b=5的时候立即终止执行但是外部命令还是在继续执行着的

   c:跳出外部循环

   有时候你在内部循环,但需要停止外部循环,break命令接收单个命令行参数值

    break n

   其中n 指定了要跳出的循环层级,默认情况下,n 为1,表名跳出当前循环与break命令相同,如果将n值设为2的话,break命令会停止下一级的外部循环

  eg:

      

#!/bin/bash
for ((a=1;a<10;a++))
  do
     echo "outloop :$a"
     for((b=1;b<10;b++))
       do
           if [ $b -eq 5 ]
           then
                break 2
           fi
          echo "inner loop :$b"
      done
done
           
当b自增到5的时候,它会终止外部的循环,使外部的循环停止下来

2:continue命令

continue命令可以提前终止某次循环中的命令,但是并不会终止整个循环,

  eg:

      

#!/bin/bash
 for((a=1;a<5;a++))
   do
      echo "outer loop is : $a"
      for((b=1;b<7;b++))
         do
             if [ $b -eq 5 ]
                then
                  continue
            fi
            echo "inner loop : $b"
         done
done
他执行的结果就是会跳过b=5时候的情况

outer loop is : 1
inner loop : 1
inner loop : 2
inner loop : 3
inner loop : 4
inner loop : 6
outer loop is : 2
inner loop : 1
inner loop : 2
inner loop : 3
inner loop : 4
inner loop : 6

可以看到与break不同是它没有终止接下来的循环但是需要注意的是continue以后的代码就不会执行了

与break命令类似continue命令也允许通过命令行参数指定要继续执行哪一级循环

continue n

eg:

    

#!/bin/bash
for ((a=1;a<5;a++))
 do
   echo "$a"
    for((b=1;b<4;b++))
       do
          if [ $a -gt 2 ] && [ $a -lt 4 ]
           then
               continue 2
          fi
          var2=$[ $a * $b ]
          echo "$a * $b is $var2"
        done
done

 当a=3的时候跳过当前循环继续上一层循环后面的命令都不会执行

3:处理循环的输出

  在shell脚本中,你可以对循环的输出使用管道或者重定向命令,这可以通过done命令之后添加一个处理命令来实现

eg:

          

#!/bin/bash
for file in /home/rich/*
do 
    if [ -d "$file" ]
   then
        echo "$file is a directory"
   else
     echo "$file is not a directory"
   fi
done > output.txt
会在当前目录下生成output.txt文档文件

4:用途:查找可执行文件

#!/bin/bash
#finding files in the PATH
#先定义IFS分隔符
IFS=:
for folder in $PATH
#echo "folder is $folder"
 do
   echo "folder is $folder"
     for file in $folder/*
        do
           if [ -x $file ]
                then
                 echo "  $file"
           fi
        done
 done > check_exe.txt
 5:用途:创建多个用户

   首先创建包含创建用户的信息文件user.csv文件这个文本文件的格式如下:userId,username 第一个条目为用户的账户ID,第二个条目是用户的全名,两个值之间使用逗号分隔,这样就形成了一种名为逗号分隔值的文件格式(.csv)

要读取文件中的数据,需要用一点shell编程的技巧,我们将IFS分隔符设置成逗号,并将其放入while语句的条件测试部分。然后使用read命令读取文件中的各行

while IFS=',' read -r userId name

read 命令会自动读取.csv文件的下一行内容,所以不需要专门在写一个循环来处理,当read命令返回flase时候,while命令就会退出

  要想把数据文件送入while命令,只需要在while命令尾部使用一个重定向符就可以了

  users.csv文件如下:

rich,Richard Blum
christine,Chistine Bresnahan
barbara,Barbara Blum

 创建useradd.sh

#!/bin/bash
input="users.csv"
while IFS=',' read -r userid name
do
  echo "addding $userid"
 sudo useradd -c "$name" -m $userid
done < "$input"
如果用户没有sudo权限可以去/etc/sudoers中去编辑是该用户用sudo权限

read命令和C语言中的scanf很像,从文件中读取内容,这样就会将用户添加进去
useradd -c 是添加一个别名说明,-m是在home目录添加文件夹



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值