Shell脚本学习笔记——语法之条件测试(1)
- 测试命令
Shell脚本中测试是用命令来完成的,常见的测试命令包含test 或 [ ,通过检查该类命令的退出码,决定条件测试是否成立。
上面这段代码,就完成了一个对于输入值是否等于100的测试。其中,read相当于C语言中的scanf,用于获取输入值;-eq就是equal(等于)的意思,用来比较两个数字是否相等。$?表示上一条指令的退出码。
从运行结果来看,当我们输入100时,退出码为0,表示结果为真;当输入200时,退出码为1,表示结果为假。
与C语言不同,在Shell中,0表示true,非0表示false。
- 测试类型
Shell脚本测试可以用来测试不同的类型,应用于不同的测试场景。常见的测试选项如下:
(1)整数测试:-eq,-ne,-lt,-gt,-le,-gt
(2)字符串测试:==,!=,-z,-n
(3)文件测试:-d,-f,-b,-c
- 测试整数
测试整形只能用测试整形的选项。
test 和 [ 都可以用来进行测试,两者使用稍有不同。虽然看起来很奇怪,但是左方括号 [ 确实是一个命令的名字,传给命令的各参数之间应该用空格隔开。命令test 或 [ 的参数形式是相同的,只不过test命令不需要 ] 参数。
- 测试字符串
但是,有一种情况要注意:
Shell脚本中的变量相当于文本替换,我们可以使用sh -x myshell.sh 将Shell脚本中的每一行展开。通过具体的过程来探究错误的原因:
那么我们怎么解决这种情况呢?如果我们就是想验证输入空字符串的结果呢?
上面这段代码就为我们提供了一种解决办法:可以在 == 两端添加前缀或者后缀,前后缀的内容不做限制,只要保证==两边添加的内容相同即可。这样,就算我们输入的是一个空字符串,==左边也不会为空,问题就解决了。
- 测试文件
字符设备是指在I/O传输过程中以字符为单位进行传输的设备,例如键盘、显示器等。
块设备是将信息存储在固定大小的块中,例如磁盘、U盘等。具有随机访问的特点。
- 多条件测试
1.逻辑反
2.逻辑与
3.逻辑或