(七)流程控制

#!/bin/bash
# shell的流程控制不可为空
:<<EOF
<?php
if (isset($_GET["q"])) {
    search(q);
}
else {
    // 不做任何事情
}
在 sh/bash 里可不能这么写,如果 else 分支没有语句执行,就不要写这个 else。
EOF

# 1. if else

# 1.1 if 语法
:<<EOF
if condition
then
    command1
    command2
    ...
    commandN
fi

写成一行(用于终端命令提示符)
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
EOF

# 1.2 if else 语法
:<<EOF
if condition
then
    command1
    command2
    ...
    commandN
else
    command
fi
EOF

# 1.3 if else-if else 语法
:<<EOF
if condition1
then
    command1
elif condition2
then
    command2
else
    commandN
fi
EOF

# 1.4 实例
a=10
b=20
if test ${a} -eq ${b} # if [ $a= $b]
then
  echo "a 和 b相等"
elif test ${a} -gt ${b} # elif [ $a -gt $b ]
then
  echo "a 大于 b"
elif test ${a} -lt ${b} # [ $a -lt $b ]
then
  echo "a 小于 b"
else
  echo "没有符合条件"
fi

# 2. for 循环
# 语法
:<<EOF
for var in item1 item2 ... itemN
do
  command1
  command2
  ...
  commandN
done

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

for loop in 1 2 3 40
do
  echo "The value is: ${loop}"
done

for str in This is a string.
do
  echo ${str}
done

# 3. while 语句
# 3.1 语法
:<<EOF
while condition
do
  command
done
EOF

# 实例
num1=1
while (( $num1<=5))
do
  echo "${num1}"
  let "num1++"
done
# 以上实例使用了 Bash let 命令,它用于执行一个或多个表达式,
# 变量计算中不需要加上 $ 来表示变量

# 3.2 读取键盘信息
echo -n '输入你最喜欢的网站名: ' # 当-n 选项,则取消尾随换行符
while read FILM
do
    echo "是的!$FILM 是一个好网站"
    break
done

# 3.3 无限循环
:<<EOF
# 第一种
while :
do
    command
done

# 第二种
while true
do
    command
done

# 第三种
for (( ; ; ))
EOF

# 4. until 循环
# until 循环执行一系列命令直至条件为 true 时停止。
# until 循环与 while 循环在处理方式上刚好相反。

# 4.1 语法格式
:<<EOF
until condition
do
  command1
done
EOF

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

# 5. case ... esac
# case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,
# 是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,
# 跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
#
# 可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

# 5.1 语法
:<<EOF
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
EOF

# 取值后面必须为单词 in,每一模式必须以右括号结束。
# 取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
# 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。
# 如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

# 实例1——数值
echo "输入1-4之间的整数"
echo "你输入的数值为:"
read num11
case $num11 in
1) echo "你输入了1"
  ;;
2) echo "你输入了2"
  ;;
3) echo "你输入了3"
  ;;
4) echo "你输入了4"
  ;;
*) echo "你输入了其他数"
  ;;
esac
# 实例2——字符串
site="runoob"
case "${site}" in
   "runoob") echo "菜鸟教程"
   ;;
   "google") echo "Google 搜索"
   ;;
   "taobao") echo "淘宝网"
   ;;
esac

# 6 跳出循环
# 6.1 break:跳出整个循环
# 6.2 continue:跳出当前循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值