您的位置:首页 > 运维架构 > Shell

Shell脚本学习-语法篇(上)

2017-07-15 15:20 267 查看

Shell脚本学习-语法篇(上)

一、条件测试

1.条件测试:test [
命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的退出状态为0,如果测试结果为假,则为1(与C语言的逻辑刚好相反)。
[是一个命令的名字,传给命令的各个参数之间应该用空格隔开。
测试命令:
[ -d DIR ]:如果DIR存在并且是一个目录则为真
[ -f FILE ]:如果FILE存在且是一个普通文件则为真
[ -z STRING ]:如果STRING的长度为零则为真
[ -n STRING ]:如果STRING的长度非零则为真
[ STRING1=STRING 2 ]:如果两个字符串相同则为真
[ STRING1!=STRING 2 ]:如果两个字符串不相同则为真
整数的比较:
-eq(等于)   -ne(不等于)    -lt(小于)
-gt(大于)   -ge(大于等于)  -le(小于等于)





字符串的比较:
==(等于) !=(不等于)  =(等于)但不推荐使用
带与、或、非的测试命令
[ !EXPR ]:EXPR可以是任意一种的测试,!表示逻辑反
[ EXPR1 -a EXPR2 ]:-a表示逻辑与
[ EXPR1 -o EXPR2 ]:-o表示逻辑或

[和[[的不同在于[[支持通配符和正则表达式
&&相当于“if...then”
||相当于“if not...then"
2.if/then/elif/else/fi
如果两条命令写在同一行则需要用分号;隔开,一行只写一条命令就不需要写了;另外,then后面有换行,但这条命令没有写完,Shell会自动续行,把下一行接在then后面当作一条命令处理。
注意:命令和参数之间必须用空格隔开。
if命令的参数组成一条子命令,如果该子命令的退出状态为真,则执行then后面的子命令,如果维嘉则执行elif、else或者fi后面的子命令。
if后面的子命令通常是测试命令,但也可以是其他命令。Shell脚本中没有{},用fi表示if语句的结束。
3.case/esac
Shell脚本中没有switch,但有case,Shell脚本中的case可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac之后,不用break。
$1是一个特殊变量,在执行脚本时自动取值为第一个命令行参数,也就是start,所以进入start分支执行相关的命令。



二、循环语句

循环体不能为空,条件判断的条件分支不能出现空语句,冒号,条件永远成立,退出码为0。
方法一:





方法二:





方法三:推荐使用。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: