#!/bin/bash #shell 运算符 #算术运算符 echo "==========算术运算符======================" #原生bash不支持简单的数学运算符,但是可以通过其它命令来实现,例如,awk和expr #expr是一款表达式计算工具,使用它能完成表达式的求值操作 val=`expr 1 + 2 `; echo "${val}"; echo "==========完整的算术运算符===============" #注意: #1、表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2 #2、完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号 a=9; b=3; echo "a=${a},b=${b}" #相加 echo "a + b :`expr $a + $b` " #相减 val=`expr $a - $b`; echo "a - b :"${val}; #乘法 val=`expr $a * $b`; echo "a * b :${val}"; #除法 val=`expr $a / $b`; echo "a / b :${val}"; #取余 val=`expr $a % $b`; echo "a % b :${val}"; #赋值 c=${b}; echo "b赋值给c,${c}"; # 等于 ,不等于 if [ $a == $b ]; then echo "a == b"; elif [ $a != $b ]; then echo "a != b"; fi echo "######################关系运算符################"; #关系运算符 #关系运算符只支持数字,不支持字符串,除非字符串的值是数字 #下面是常用的关系运算符,a=10 ,b=20; a=10; b=20; #-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。 if [ $a -eq $b ]; then echo "$a -eq $b,a等于b "; else echo "$a -eq $b,a不等于b " fi #-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 if [ $a -ne $b ]; then echo "$a -ne $b,a不等于b"; else echo "$a -ne $b,a等于b"; fi #-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 if [ $a -gt $b ]; then echo "a > b"; else echo "a < b"; fi #-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 if [ $a -lt $b ]; then echo "a < b"; else echo "a > b"; fi #-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。 if [ $a -ge $b ]; then echo " a >= b"; else echo "a < b"; fi #-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。 if [ $a -le $b ]; then echo "a <= b"; else echo "a > b"; fi echo "######################布尔运算符################"; # ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。 if [ ! $a == $b ]; then echo "a 不等于 b" fi # -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。 if [ $a -lt 100 -o $b -gt 1 ]; then echo "-o ,或运算"; fi #-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。 if [ $a -gt 1 -a $b -gt 1 ] then echo "-a 与运算"; fi echo "######################逻辑运算符################"; # && 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false if [[ $a -lt 100 && $b -gt 0 ]] then echo "逻辑运算符 && "; fi # || 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true if [[ $a -lt 100 || $b -gt 99 ]] then echo "逻辑运算符 || "; fi echo "######################字符串运算符################"; #下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg": # = 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。 a="abc"; b="efg"; if [[ $a = $b ]]; then echo "a=b"; else echo "字符串 a !=b"; fi # != 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。 if [[ $a != $b ]]; then echo "字符串 a !=b"; fi # -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。 if [[ -z $a ]]; then echo "$a 为0"; else echo "$a 不为0"; fi # -n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n "$a" ] 返回 true。 if [ -n $a ] then echo "$a 长度不为0"; else echo "$a 长度为0" fi # $ 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。 if [ $a ] then echo "$a 不为空"; fi echo "######################文件测试运算符################"; file="C:UsersEDZDesktopshelldemo.txt"; # -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。 if [[ ! -b $file ]]; then echo "不是块设备文件"; fi # -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。 if [[ ! -c $file ]]; then echo "不是字符设备文件"; fi # -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。 if [ ! -d $file ];then echo "不是目录文件"; fi # -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。 if [ -f $file ]; then echo "普通文件"; fi # -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。 if [ -g $file ];then echo "包含SGID"; else echo "没有包含SGID" fi # -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。 if [ -k $file ];then echo "设置了粘着位"; else echo "没有设置粘着位"; fi # -p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。 if [[ -p $file ]]; then echo "是有名管道" else echo "不是有名管道"; fi # -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。 if [ -u $file ] ; then echo "是设置了SUID"; else echo "没有设置SUID"; fi # -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。 if [ -r $file ] ; then echo "可读"; else echo "不可读"; fi # -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。 if [ -w $file ];then echo "可写" else echo "不可写"; fi # -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。 if [ -x $file ];then echo "可执行"; else echo "不可执行"; fi # -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。 if [ -s $file ];then echo "文件不为空"; else echo "文件为空"; fi # -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。 if [ -e $file ];then echo "文件存在"; else echo "文件不存在"; fi echo "my name is zhangsan " > "C:UsersEDZDesktopshelldemo.txt";