天天看点

Linux shell中的(()),[[]],&&,||使用总结

((表达式1, 表达式2...)) ,里面的表达式可以和c语言的表达式一样使用,甚至是3目运算符,变量无需使用$表示;支持多个表达式,但是并不支持多个语句;多个表达式的分割标志是 逗号,如果用分号隔开,表示多个语句;当使用多个语句的时候会报错;

表达式的值可以赋值给其他变量,这时候需要用 $((表达式)) 来获取表达式的值,然后赋值给变量;

对于for语句来说,通常需要的是条件表达式,而 条件表达式通常是一组语句组成的,这时候支持在(())中使用多个语句,因为尽管是多个语句的形式,但是是被 for用作 条件表达式使用的;

&& , || 命令连接符号 ,常用格式为: command1 && command2 , 或者 command1 || command2,根据command1的 $? 值决定后面的命令是否运行;

我们有时候会看到 command1 && command2 || command3 这种方式,其实这种方式是不推荐的,因为很容易出错:

如果command1 执行成功,那么执行command2, 但是如果command2 执行失败,那么将执行command3. 从而变成了 command1成功了,command3被执行了;

而如果command1 执行失败,那么command2将不会执行,所以遇到 command3的时候,发现应该执行command3. 因为 command1的结果就是 : command1 && command2的结果; 此时就变成了: command1 执行失败, command3被执行了;

也就是说,无论commmand1 成功与否,command3 都有可能被执行,所以不推荐这种用法;

[[ ]] 与 [ ] 用于组合条件判断:

在[ ] 内表示多个条件的时候,需要用 -a, -o 表示逻辑关系,如果遇到变量,变量名最好用双引号括起来,避免遇到变量为空时候的报错;

在使用[[ ]] 表示多个条件的时候,多个条件之间的逻辑关系需要使用 && , || 表示,不支持 -a, -o , 同时 [[ ]] 内部的变量不需要用双引号括起来;

如果只有一个条件,那么两者除了变量是否需要双引号之外,没有其他区别;

继续阅读