shell编程之流程控制篇

#!/bin/bash
#if elif fi 
#如果else分支没有语句执行,就不要写这个else。
#格式
#if condition
#then 
#   command1
#   command2
#   .....
#   commandn
#elif condition2
#then
#   commandn
#else
#   commandm
#fi

#也可以写成一行,例如
#if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

#for循环
#格式 
#for var in item1 item2 ... itemN
#do 
#    command1
#    command2
#    ....
#    commandn
#done

#写成一行
#for var in item1 item2 ... itemN; do command1; command2… done;

#遍历数组
array=(1 2 3 4 5)
#带下标
for i in ${!array[@]}
do
    printf  "%s\t%s\n" "${i}" "${array[$i]}"
done

#不带下标
for i in ${array[@]}
do
    printf  "%s\n" "$i"
done

#while语句
#while condition
#do
#   command
#done


int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done
#let命令是bash中用于计算的工具,提供常用运算符还提供了方幂**运算符。在变量的房屋计算中不需要加上$来表示变量,如果表#达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1。
#语法
#let arg [arg ...]    #arg代表运算式
#例如
#let a++,b--
#let "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 - 4))"

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
    echo "是的!$FILM 是一个好网站"
done

#while无限循环
#语法格式
:<<EOF
while :
do
    command
done
或者
while true
do
    command
done
或者
for (( ; ; ))

:<<EOF
语法:

((表达式1,表达式2…))

特点:

1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。

2、在双括号结构中,所有变量可以不加入:“$”符号前缀。

3、双括号可以进行逻辑运算,四则运算

4、双括号结构 扩展了forwhile,if条件测试运算

5、支持多个表达式运算,各个表达式之间用“,”分开

例如:
扩展逻辑运算
a=1;
b="ab";


echo $((a>1?8:9));

((b!="a"))&& echo "err2";
((a<2))&& echo "ok";

#扩展四则运算
a=1;
b=2;
c=3;

((a=a+1));
echo $a;

a=$((a+1,b++,c++));
echo $a,$b,$c

#扩展流程控制语句
num=100;
total=0;

for((i=0;i<=num;i++));
do
    ((total+=i));
done
echo $total;

total=0;
i=0;
while((i<=num));
do
    ((total+=i,i++));
done
echo $total;

if((total>=5050));then
    echo "ok";
fi

EOF

#until循环
:<<EOF
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用
EOF

#语法格式
#until condition
#do
#    command
#done

a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

#case的用法
#Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
:<<EOF
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
EOF

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

#跳出循环  break ,continue

while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done

#esac  case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两#个分号表示break。

#continue命令仅仅是跳出当前循环

while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

#这个例子中游戏永远不会结束

猜你喜欢

转载自blog.csdn.net/qq_35211818/article/details/81332611