【Unix/Linux.Shell Script】Shell Script程序的流程控制语句
2014-09-21 22:27
746 查看
与传统语言不同的是,shell用于指定条件值的不是布尔表达式而是命令和字符串。
结果为真返回0, 结果为假返回1.
test语句的等价形式为:
可用中括号代替test
注意表达式与中括号间有空格
-ne —— 不等于则为真
-gt —— 大于则为真
-ge —— 大于等于则为真
-lt —— 小于则为真
-le —— 小于等于则为真
例如:
示例1:
示例2:
!= —— 不想等则为真
-z 字符串 —— 字符串长度=0则为真
-n 字符串 —— 字符串长度不为0则为真
-r 文件名 —— 如果文件存在且可读则为真
-w 文件名 —— 如果文件存在且可写则为真
-x 文件名 —— 如果文件存在且可执行则为真
-s 文件名 —— 如果文件存在且至少有一个字符则为真
-d 文件名 —— 如果文件存在且为目录则为真
-f 文件名 —— 如果文件存在且为普通文件则为真
-c 文件名 —— 如果文件存在且为字符型特殊文件则为真
-b 文件名 —— 如果文件存在且为块特殊文件则为真
-a —— 逻辑与
-o —— 逻辑或
! —— 逻辑非
或
例如:
run.sh
每个条件分支后必须以两个分号结尾。
shell通过计算字符串的值,将其结果依次和表达式1,表达式2,等进行比较,直到找到一个匹配的表达式为止,如果找到了匹配项则执行它下面的命令直到遇到一对分号;;为止。
在case表达式中也可以使用shell的通配符 *, ?, [] 。通常用 * 作为case命令的最后表达式以便使在前面找不到任何相应的匹配项时执行 其他命令行 的命令。
例如:
run.sh
变量名可以是用户选择的任何字符串,在in之后给出的数值序列将顺序替换循环命令列表中的$var。如果省略了in,则变量的取值将是位置参数。对变量的每一个可能的赋值都将执行do和done之间的命令列表。
例如:
run.sh
只要while的若干个命令行中最后一个命令的返回状态为真,while循环就继续执行do done之间的若干个命令行。
until命令是另一种循环结构,until和while循环的区别在于:while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。其格式为:
shell还提供了true和false两条命令用于建立无限循环结构的需要,他们的返回状态分别为0和非0.
例如:
continue用于不执行循环中后面的语句而立即开始下一个循环的执行
这两个语句只有放在do和done之间才有效
条件判断命令 —— test
test命令用于检查某个条件是否成立,它可以进行数值,字符和文件三个方面的测试。test 表达式1 -参数 表达式2 或 test -参数 表达式
结果为真返回0, 结果为假返回1.
test语句的等价形式为:
[ 表达式1 -参数 表达式2 ]
可用中括号代替test
注意表达式与中括号间有空格
数值测试
-eq —— 等于则为真-ne —— 不等于则为真
-gt —— 大于则为真
-ge —— 大于等于则为真
-lt —— 小于则为真
-le —— 小于等于则为真
例如:
示例1:
#!/bin/bash test 1 -lt 4 echo $?
示例2:
if test $1 -gt 0 then echo "$1 number is positive" fi
字符串测试
= —— 等于伟真!= —— 不想等则为真
-z 字符串 —— 字符串长度=0则为真
-n 字符串 —— 字符串长度不为0则为真
#!/bin/bash TESTSTRING1="1" TESTSTRING2="2" test TESTSTRING1 != TESTSTRING2 echo $? test -z TESTSTRING1 echo $?
文件测试
-e 文件名 —— 如果文件存在则为真-r 文件名 —— 如果文件存在且可读则为真
-w 文件名 —— 如果文件存在且可写则为真
-x 文件名 —— 如果文件存在且可执行则为真
-s 文件名 —— 如果文件存在且至少有一个字符则为真
-d 文件名 —— 如果文件存在且为目录则为真
-f 文件名 —— 如果文件存在且为普通文件则为真
-c 文件名 —— 如果文件存在且为字符型特殊文件则为真
-b 文件名 —— 如果文件存在且为块特殊文件则为真
逻辑操作运算符
linux还提供了 !, -o, -a 三个逻辑操作符将测试条件连接起来;其优先级为 ! 最高, -a 次之, -o最低:-a —— 逻辑与
-o —— 逻辑或
! —— 逻辑非
条件分支语句 —— if
一般格式为:if 条件命令判断串 then 条件为真时的命令串 else 条件为假时的命令串 fi
或
if 条件命令判断串;then 条件为真时的命令串 else 条件为假时的命令串 fi
例如:
run.sh
#!/bin/bash if [ $# -eq 0 ]; then echo "input 0 parameter" elif [ $# -gt 1 ]; then echo "input more than 1 parameters" else echo "input 1 parameter" fi
条件分支语句 —— case
case条件选择为用户提供了根据字符串或变量的值从多个选项中选择一项的方法,其格式如下:case 字符串 in 表达式1) 若干个命令行 ;; 表达式2) 若干个命令行 ;; ... ... *) 其他命令行 esac
每个条件分支后必须以两个分号结尾。
shell通过计算字符串的值,将其结果依次和表达式1,表达式2,等进行比较,直到找到一个匹配的表达式为止,如果找到了匹配项则执行它下面的命令直到遇到一对分号;;为止。
在case表达式中也可以使用shell的通配符 *, ?, [] 。通常用 * 作为case命令的最后表达式以便使在前面找不到任何相应的匹配项时执行 其他命令行 的命令。
例如:
run.sh
#!/bin/bash case "$#" in 0) echo "input o parameter" ;; 1) echo "input 1 parameter" ;; *) echo "input more than 1 parameters" esac
循环控制语句 —— for
for循环对一个变量的可能的值都执行一个命令序列。赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以艾程序以外以位置参数的形式提供,for循环的一般格式为:for 变量名 [in 数值列表] do 若干个命令行 done
变量名可以是用户选择的任何字符串,在in之后给出的数值序列将顺序替换循环命令列表中的$var。如果省略了in,则变量的取值将是位置参数。对变量的每一个可能的赋值都将执行do和done之间的命令列表。
例如:
run.sh
#!/bin/bash for i do echo $i done
#!/bin/bash for i in value1 value2 value3 value4 do echo $i done
循环控制语句 —— while 和 until
while和until命令都是用命令的返回值状态值来控制循环的。while循环的一般格式为:while 若干个命令行 do 若干个命令行 done
只要while的若干个命令行中最后一个命令的返回状态为真,while循环就继续执行do done之间的若干个命令行。
until命令是另一种循环结构,until和while循环的区别在于:while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。其格式为:
until 若干个命令行 do 若干个命令行 done
shell还提供了true和false两条命令用于建立无限循环结构的需要,他们的返回状态分别为0和非0.
例如:
#!/bin/bash i=1 while [ $i -le 5 ] do echo $i i=$[$i+1] #[] command is used to sum done
无条件控制语句 —— break 和 continue
break语句用于立即终止当前循环的执行continue用于不执行循环中后面的语句而立即开始下一个循环的执行
这两个语句只有放在do和done之间才有效
相关文章推荐
- Linux的Shell脚本中IF流程控制语句的基本语法
- Linux学习之Shell--第四天:Shell流程控制-循环语句for
- 【Linux学习笔记】Shell 基础(3) — Shell流程控制语句
- Linux学习之Shell--第三天:Shell流程控制-if语句
- 【Unix/Linux.Shell Script】Shell Script的执行及特殊字符
- Linux学习之Shell--第三天:Shell流程控制-if语句
- Linux学习之Shell--第四天:Shell流程控制-循环语句for
- linux中shell五种流程控制语句介绍
- linux中的shell script 的流程控制语句
- Linux Bash Shell学习(十三):流程控制——while/util
- Linux Bash Shell学习(十一):流程控制——case
- UNIX/Linux shell脚本 if语句的几个案例(适合Linux初学者)
- shell-6-退出状态与流程控制语句(if;test;case命令)
- Shell学习笔记(9)-流程控制之For语句
- shell的控制流程语句
- PLC中ST语言的几种程序流程控制语句
- Shell流程控制语句
- Shell学习笔记(8)-流程控制之IF语句
- shell 脚本之程序流程控制命令(1)
- Shell学习笔记(10)-流程控制之while语句