Shell 条件语句

在编写shell脚本,有可能是一种情况,当你需要采取一个路径两条路径。所以,需要利用条件语句,让程序作出正确的决策和执行正确的动作。

UNIX Shell支持条件语句,从而根据不同的条件下执行不同的操作。在这里,我们将解释以下两个逻辑条件语句:

  • if...else 语句
  • case...esac 条件语句

if...else 语句:

if else语句是有用的决策语句,可以用来从一个给定的选项中选择一个选项。

UNIX Shell支持以下形式的if.. else语句:

大部分的 if 语句检查前面的章节中讨论的关系运算符的关系。

if...fi语句

if...fi 语句的基本控制语句,它允许Shell有条件作出决定并执行语句。

语法

if [ expression ]
then
   Statement(s) to be executed if expression is true
fi

Shell expression求值。如果结果值是true,给定statement被执行。如果 expression 为false ,则没有语句将不会被执行。大部分的时候,会使用比较操作符决策。

关注对括号和表达之间的空间。这个空间是强制性的,否则语法错误。

如果expression 是一个shell命令,那么它会被假定如此,如果它执行后返回0。如果它是一个布尔表达式,那么返回true。

示例

文件名:iffi.sh

#!/bin/sh

a=10
b=20

if [ $a == $b ]
then
   echo "a is equal to b"
fi

if [ $a != $b ]
then
   echo "a is not equal to b"
fi
bash /share/lesson/shell/iffi.sh

在右侧实验区运行上面的命令看看什么效果吧

if...else...fi 语句

if...else...fi 语句是控制语句,它允许下一个表格执行语句 Shell 更可控的方式在两个选择之间作出决定。

语法

if [ expression ]
then
   Statement(s) to be executed if expression is true
else
   Statement(s) to be executed if expression is not true
fi

Shell expression 求值。如果结果值是真实的,给定 statement(s) 被执行。如果表达式为 false,则语句将不会被执行。

例子:

文件名:ifelsefi.sh

#!/bin/sh

a=10
b=20

if [ $a == $b ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi
bash /share/lesson/shell/ifelsefi.sh

在右侧实验区运行上面的命令看看什么效果吧

if...elif...fi语句

语法

if [ expression 1 ]
then
   Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
   Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
   Statement(s) to be executed if expression 3 is true
else
   Statement(s) to be executed if no expression is true
fi

示例:

文件名:ifeliffi.sh

#!/bin/sh

a=10
b=20

if [ $a == $b ]
then
   echo "a is equal to b"
elif [ $a -gt $b ]
then
   echo "a is greater than b"
elif [ $a -lt $b ]
then
   echo "a is less than b"
else
   echo "None of the condition met"
fi
bash /share/lesson/shell/ifeliffi.sh

在右侧实验区运行上面的命令看看什么效果吧

case...esac 语句:

if...elif 可以使用多个 elif 语句执行多分支。然而,这并不总是最佳的解决方案,尤其是当所有的分支依赖于一个单一的变量的值。

UNIX Shell支持 case...esac 语句处理正是由于这个情况,它这样做更有效地比 if... elif 语句。

目前只有一种形式的情况下,这里详细case...esac 语句:

UNIX shell 的 case...esac 语句,比较像其他编程语言里的 switch...case ,如C或C + +和Perl等非常相似。

可以使用多个if...elif 语句执行多分支。然而,这并不总是最佳的解决方案,尤其是当所有的分支依赖于一个单一的变量的值。

Shell支持 case...esac 语句处理正是这种情况下,它这样做比 if...elif 语句更有效。

语法

case...esac 语句基本语法 是为了给一个表达式计算和几种不同的语句来执行基于表达式的值。

解释器检查每一种情况下对表达式的值,直到找到一个匹配。如果没有匹配,默认情况下会被使用。

case word in
  pattern1)
     Statement(s) to be executed if pattern1 matches
     ;;
  pattern2)
     Statement(s) to be executed if pattern2 matches
     ;;
  pattern3)
     Statement(s) to be executed if pattern3 matches
     ;;
esac

这里的字符串字每个模式进行比较,直到找到一个匹配。执行语句匹配模式。如果没有找到匹配,声明退出的情况下不执行任何动作。

没有最大数量的模式,但最小是一个。

当语句部分执行,命令;; 表明程序流程跳转到结束整个 case 语句。和C编程语言的 break 类似。

例1:

文件名:caseesac.sh

#!/bin/sh

FRUIT="kiwi"

case "$FRUIT" in
   "apple") echo "Apple pie is quite tasty." 
   ;;
   "banana") echo "I like banana nut bread." 
   ;;
   "kiwi") echo "New Zealand is famous for kiwi." 
   ;;
esac
bash /share/lesson/shell/ifeliffi.sh

在右侧实验区运行上面的命令看看什么效果吧

例2:

case语句是一个很好用的命令行参数如下计算:

文件名:easc-parm.sh

#!/bin/sh

option="${1}" 
case ${option} in 
   -f) FILE="${2}" 
      echo "File name is $FILE"
      ;; 
   -d) DIR="${2}" 
      echo "Dir name is $DIR"
      ;; 
   *)  
      echo "`basename ${0}`:usage: [-f file] | [-d directory]" 
      exit 1 # Command to come out of the program with status 1
      ;; 
esac 
bash /share/lesson/shell/easc-parm.sh -f /etc/passwd
bash /share/lesson/shell/easc-parm.sh -d /var

在右侧实验区运行上面的命令看看什么效果吧

移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。

狐狸教程 Copyright 2021

进入全屏