shell流程控制结构

  shell脚本中的流程控制结构包括if/else语句、case语句、for循环、while循环、until循环等内容。

if/else语句

(1)最简单的if语句。使用格式有2种方式,分别如下

  使用格式1:

if [ 条件判断式 ];then
    程序段
fi

  使用格式2:

if [ 条件判断式 ]
then
    程序段
fi

 说明:(1)建议使用格式1。格式1和格式2的区别是then重新换行以及是否带命令分隔符";"。(2)if语句使用fi结尾。否则报错。

 下面看一个简单示例。

#!/bin/bash

num1=10
num2=15
if [ "${num1}" -lt "${num2}" ];then
   echo "${num1} is less than ${num2}"
else
fi

(2)简单的if else语句,使用格式如下:

if [ 条件判断式 ];then
    程序段
else
    程序段
fi

 修改比较数值大小的实例,如下

#!/bin/bash

num1=10
num2=15
if [ "${num1}" -lt "${num2}" ];then
   echo "${num1} is less than ${num2}"
else
   echo "${num1} is greater than ${num2}"
fi

(3)多分支的if else语句,使用格式如下:

if [ 条件判断式1 ];then
    程序段
elif [ 条件判断式2 ];then
    程序段
else
   程序段
fi

  继续修改比较数值大小的实例,代码如下

#!/bin/bash

num1=10
num2=10
if [ "${num1}" -lt "${num2}" ];then
   echo "${num1} is less than ${num2}"
elif [ "${num1}" -gt "${num2}" ];then
   echo "${num1} is greater than ${num2}"
else
   echo "${num1} is equal to ${num2}"
fi

case语句

  case语句为多选择语句,可以用case语句匹配一个值或者一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

扫描二维码关注公众号,回复: 1053057 查看本文章
casein
    模式1)
        程序段1
        ;;
    模式2)
        程序段2
        ;;
    ……
    *)
        程序段n
        ;;
esac

   模式可以是变量或常数,可以包含元字符。其中*表示任意字符、?表示任意单一字符、[..]表示范围中的任意字符。下面通过实例来了解case语句用法。

#!/bin/bash

read -p "Please input yes or no:" YN

case "${YN}" in
  Yes)
    echo "Input Yes"
    ;;
  No)
      echo "Input No"
    ;;
  yes|YES)
      echo "please input yes"
    ;;
  NO|no)
      echo "please input no"
    ;;
  *)
      echo "input error"
    ;;
esac

for循环

(1)最简单的for循环语句,使用格式如下:

for 变量名 in 值1 值2 值3 ... 值n
do
  程序段
done

 for循环工作时会对in后面的变量值逐一遍历取值并进入程序段操作。使用基本实例如下:

for i in $(seq 1 5)
do
  echo $i
done

(2)for循环的第二种格式如下

for((初始值;限制值;执行步长))
do
  程序段
done

  该类型for循环适合数值方式的运算中。简单实例如下

#!/bin/bash

for((i=1;i<=10;i++))
do
  echo $i
done

while循环

  while循环用于不断执行一系列命令,也用于从输入文件中读取数据,使用格式如下:

while 命令
do
  程序段
done

(1)打印1~100的整数

#!/bin/bash

i=1
while [ $i -le 100 ]
do
  echo $i
  i=$(($i+1))
done

(2)从文件中读取数据,打印每一行内容

#!/bin/bash

while read line
do
  echo $line
done < /etc/passwd 

(3)从文件中读入,并赋值给对应的变量。假设student.txt文件中每一行包含3列分别为Name、Age、Address,字段分隔符为空格。

#!/bin/bash

while read NAME AGE ADDRESS
do
  echo "name=${NAME}"
  echo "age=${AGE}"
  echo "address=${ADDRESS}"
done < student.xt 

until循环

  until循环执行一系列命令直至条件为真时停止。until循环会执行一次程序体再判断测试条件。测试条件为真,则执行退出。某些场景下,until循环会比while循环更好用。使用格式为如下:

until 命令
do
  程序段
done

(1)打印1~100的整数

#!/bin/bash

i=1
until [ $i -le 100 ]
do
  echo $i
  i=$(($i+1))
done

break和continue使用

 有时需要机遇某些准则退出循环或者跳过循环步。其中break命令允许跳出循环、continue用于跳出当次循环。

(1)打印小于50的整数。

#!/bin/bash

i=1
while [ $i -le 100 ]
do
  echo $i
  i=$(($i+1))
  if [ $i -gt 50 ];then
    break
  fi
done

(2)打印1-100以内的偶数。

#!/bin/bash

i=1
while [ $i -le 100 ]
do
  if [ $i%2 -eq 0 ];then
    echo $i
  fi
  i=$(($i+1))
done

猜你喜欢

转载自www.cnblogs.com/linyfeng/p/9096171.html