-
布尔运算符
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
-
! :非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-
-o :或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-
-a :与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
-
&& :逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
-
|| :逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
文件运算符
-
-b file :检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-
-c file :检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-
-d file :检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-
-f file :检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-
-g file :检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-
-k file :检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-
-p file :检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-
-u file :检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-
-r file :检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-
-w file :检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-
-x file :检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-
-s file :检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-
-e file :检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
执行相关
命令替换
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
执行命令:
-
`ls /etc` : 反引号 (所有的unix系统都支持)
-
$(ls /etc) : $+() (部分unix系统不支持)
多个嵌套使用时,从内向外执行for file in s /etc 或 for file in $(ls /etc) 循环中使用
`dirname $0` 获取脚本文件所在的目录
path=$(cd `dirname $0`;pwd) : 获取脚本当前所在目录,并且执行cd命令到达该目录,使用pwd获取路径并赋值到path变量
算术运算
-
$[ ] : 加减乘除,不必添加空格
-
$(( )) :加减乘除等,不必添加空格
逻辑判断
-
[ ] : 中括号旁边和运算符两边必须添加空格 (可以使用,不推荐)
-
[[ ]]:中括号旁边和运算符两边必须添加空格 (字符串验证时,推荐使用)
-
(()) : 中括号旁边和运算符两边必须添加空格 (数字验证时,推荐使用)
-
[[]] 和 (()) 分别是[ ]的针对数学比较表达式和字符串表达式的加强版。
-
使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
[[ ]]中增加模式匹配特效;
(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号
(编辑:桂林站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|