1.在学习分支语句之前得先知道test命令语句如下:
(1)test语句
test语句可测试三种对象:
字符串 整数 文件属性
(2)每种测试对象都有若干测试操作符
例如:
test "$answer" = "yes"
变量answer的值是否为字符串yes
test $num –eq 18
变量num的值是否为整数18
test -d tmp
测试tmp是否为一个目录名
(3) 字符串测试
s1 = s2 测试两个字符串的内容是否完全一样
s1 != s2 测试两个字符串的内容是否有差异
-z s1 测试s1 字符串的长度是否为0
-n s1 测试s1 字符串的长度是否不为0
(4) 整数测试
a -eq b 测试a 与b 是否相等
a -ne b 测试a 与b 是否不相等
a -gt b 测试a 是否大于b
a -ge b 测试a 是否大于等于b
a -lt b 测试a 是否小于b
a -le b 测试a 是否小于等于b
(5) 文件测试
-d name 测试name 是否为一个目录
-e name 测试一个文件是否存在
-f name 测试name 是否为普通文件
-L name 测试name 是否为符号链接
-r name 测试name 文件是否存在且为可读
-w name 测试name 文件是否存在且为可写
-x name 测试name 文件是否存在且为可执行
-s name 测试name 文件是否存在且其长度不为0
f1 -nt f2 测试文件f1 是否比文件f2 更新
f1 -ot f2 测试文件f1 是否比文件f2 更旧
2.分支语句的命令,不同与c语言和c++的,它没有花括号,案例如下:
(1)首先创建一个文件,在文件里面编写:
(2)然后执行如下命令查看结果:
(3)elif的用法,就是类似于c语言中的elseif,如下:
(4)编写一个案例来判断用户是否存在,如果存在,打印存在,否则不存在,如下:
3.多路分支语句命令
(1) case…esac
多路分支语句case用于多重条件测试, 语法结构清晰自然. 其语法为:
case 字符串变量 in
模式1)
命令表1
;;
模式2 | 模式3)
命令表2
;;
……
模式n)
命令表n
;;
esac
注:
* case语句只能检测字符串变量
* 各模式中可用文件名元字符,以右括号结束
* 一次可以匹配多个模式用“|”分开
* 命令表以单独的双分号行结束,退出case语句
* 模式 n常写为字符* 表示所有其它模式
* 最后一个双分号行可以省略
(2)代码的编写如下:
(3)接下来我们来编写一个学生成绩分级管理的小案例,这里的话比较基础就不解释了:
可以加入一个判断出错的语句如下,也可以写成c语言的形式,例如:[] || []
补:
-o 或
-a 与
!非
4.循环语句
(1)for循环语法:
for 变量名 in 单词表
do
命令表
done
注:变量依次取单词表中的各个单词, 每取一次单词, 就执行一次循环体中的命令. 循环 次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分 开的多条
(2)代码如下:
(2)$*和$@的区别
$*:"$*"此时是将参数作为一个整体展现出来,"$@"是将多个参数看作个体展现出来, 如下所示:
(3)while用法
while 命令或表达式
do
命令表
done
(4)实际案例如下:
注:这里的话有两种写法:
*while []
*while (())与c语言类似
(5)break和continue的话和c语言类似,用法如下:
5.shell函数
(1)函数定义:
function name(){
statements
[return value]
}
类似c语言去理解
(2)简单的函数调用实例操作:
(3)$?:获取函数的返回值,如下:
(4)采用命令置换,例如下面:
注:它返回的不是一个返回值1,而是原来函数的echo里面的值
(5)上面的进阶操作,加上位置变量操作
(6) 如果函数内有变量的情况,在val前加入local,否则默认全局变量: