具有一般高级程序设计语言所具有的条件控制结构,循环控制结构和函数定义与调用功能
条件控制结构:if,case
循环控制结构:for,while,until
- 条件测试
- test命令:用于评估表达式以便进行条件控制
- 两种格式:test 表达式 或者 [ 表达式 ]
- 如果表达式的值为“真”,其退出状态为0(即成功),否则退出状态为非零值(失败)
- 方括号左右两个各需要至少一个空格
-
test "3" \> "2";echo $? # result 0
-
[ "2" \> "3" ];echo $? # result 1
- test命令可以和多种系统运算符一起使用,这些运算符可以分成4类:文件属性测试运算符,字符串测试运算符,数值测试运算符,逻辑运算符
- 详细教程:链接
- let命令:为了解决test命令只能执行算术比较运算且书写繁琐
- 命令格式:let 算术表达式 或 ((算术表达式))
- 这里的算术表达式使用C语言中的表达式的语法、优先级和结合性
- 可以执行C语言中常见的算术、逻辑、和位操作。除了"++","--",",",所有整型运算符都得到支持,还有幂方"**"
- 如果算术表达式求值为0,则设置退出状态为1;如果求值为非零值,则退出状态为0
- 算术运算的操作数只能是整数(按长整数进行求值)
- $((算术表达式))可以返回算术表达式的确切值,而不是let命令的退出码
- "[[ ]]"测试
- 同(())一样,"[[ ]]"可以对文件名和字符串使用更自然的语法,特殊字符不用转义,"[[ ]]"中,允许用括号和逻辑操作符"&&" 和 "||"把test命令支持的测试组合起来
- if语句
- 格式:
if 测试条件1 then 命令组1 [elif 测试条件2 then 命令组2] [else 命令n] fi
if 测试条件1; then 命令组1 [elif 测试条件2; then 命令组2] [else 命令组n] fi
-
if语句唯一可测试就是命令退出状态
- 格式:
- case语句:多重条件选择
- 格式:
-
case 字符串 in 模式字符串1) 命令 ... 命令;;#表示break ... esac
-
case的退出状态是整个结构中最后执行的那个命令的退出状态,若没有执行任何命令,则退出状态为0#! /bin/bash # case_pattern.sh case $1 in -f) echo "find first.sh" find ~ -name "first.sh";; -l) echo "ls first.sh" ls -l first.sh;; *) echo 'quit';; esac # execute source case_pattern.sh -f # result find first.sh /home/hwq/sh/first.sh
- test命令:用于评估表达式以便进行条件控制