[Linux] shell 学习(四) 分支语句和循环语句

1.分支语句

条件分支

条件分支共有以下三种:

  • 1.if … then
    格式如下:
if [...]; then
   expression
fi

如果存在多个判断条件时,可以使用||,&&表示与和非:

if [...] && [...]; then
   expression
fi

这种方式表示:当条件满足时,进入if中执行,fi是if的反写,表示if结束。

  • 2.if … then … else … fi

格式表示如下:

if [...]; then
    ...
else
    ...
fi

这种方式表示:当条件满足时,进入if语句中,否则进入else语句中。

  • 3.if … then … elif … else … fi

其格式如下:

if [condition1]; then
    ...
elif [condition2]; then
    ...
else
    ...
fi

这种方式表示:当满足条件1时进入if语句中执行,不再执行elif和else语句中的内容;如果不满足condition1,但满足condition2,则进入elif语句中执行;如果都不满足,则执行else语句中的内容。

比如,在以下脚本中,接收一个整数,并判断是否为奇数:

#!/bin/bash
#!/bin/bash
declare -i number
read -p "please enter a number:" number
if [ -n "$number" ]; then
    echo "you enter nuber is $number"
    if [ "$((number%2))" == 0 ]; then
        echo "this number is oushu"
    elif [ "$number" -gt 2 ]; then
        echo "this nuber is biger than 2"
    else
        echo "this is a jishu"
    fi
fi

还有一个比较经典的题目:分别有1,2,5分三种硬币,有几种方式能组合为1毛?

#!/bin/bash


times=0;
for ((i=0;i<=10;i++))
do

        for((j=0;j<=5;j++))
        do
                for((k=0;k<=2;k++))
                do
                        if [ $((i+2*j+5*k)) -eq 10 ];then
                                times=$(($times+1))
                        fi
                done
        done
done

echo "1,2,5组成1元,可以有"${times}" 种方式."

$(())用于整数运算.

case … in … esac

case语句用于多重分支判断中,格式如下:

case $variable in 
  "case1")
     .......
  ;;
  "case2")
     .......
  ;;
  "case3")
      ......
  ;;
  *)
      ......
  ;;
esac

以上格式总结如下:

  • 1.每个模式使用双引号扩起来,并且使用)结尾;
  • 2.每个模式使用双分号作为结束标记;
  • 3.*表示默认模式,好比其他语言中的default关键字,当不满足以上模式时,进入默认模式中去。
  • 3.使用case的反写esac表示case的结尾;

比如以下示例:

#!/bin/bash

read -p "Please enter a word,and let me tell you the animal:" word

case $word in
  "p")
    echo "p is PIG"
  ;;
  "d")
    echo "d is DOG"
  ;;
  "c")
    echo "c is CAT"
  ;;
  *)
    echo "uh~~~ i dont know what you mean."
  ;;
esac

2.循环语句

while…do…done循环

while循环表示当条件成立时,就开始循环,条件不成立时结束循环,do...done之间为循环体,其格式为:

while [condition]
do
    ...
done

如计算1-100的数的和:

#!/bin/bash
# 当i==100 时,不再循环
while [ "$i" != 100 ]
do
    i=$(($i+1))
    sum=$(($sum+$i))
done
echo "the 1+...+100 result is:$sum"

until…do…done循环

until循环恰恰和while循环相反,表示当条件成立时,就终止循环,同样地,do…done之间为循环体,其格式为:

until [ condition ]
do
    ...
done

用until来计算1-100的数的和:

#!/bin/bash
# 当 i==100时,终止循环
until [ "$i" == 100 ]
do
   i=$(($i+1))
   sum=$(($sum+$i))
done
echo "the result 1+...+100 is $sum"

for循环

while循环和until循环可以看做是不定循环,因为不确定他们的循环次数,那么for循环就可以看做是固定循环了,因为只会根据给定的循环条件进行循环,其格式有两种,分别如下:

  • 第一种形式
for var in con1 con2 con3 ...
do
    ......
done
  • 第二种形式
for (( 初始值;限制值;执行步长))
do
    ......
done

比如下面这个很简单的示例:

#!/bin/bash

for number in 1 2 3 4 5
do
   echo "get $number"
done

或者可以这样:

#!/bin/bash

for ((i=0; i<10; i=i+1))
do
  sum=$(($sum+i))
done
echo "the result of 1+...+10 is $sum "

无限循环

通常无限循环有以下三种格式:

  • 第一种:while :
# :表示true
while :
do
   ......
done
  • 第二种:while true
while true
do
   ......
done
  • 第三种:for ((;;))
for ((;;))

跳出循环

跳出循环有两种方式:

  • break:终止执行所有循环
  • continue:终止该次循环,进行下次循环

你可能感兴趣的:(if...then,for...do...done,Linux&Shell)