古越剑箫

学习是一种习惯

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

 

 

#!/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 ] 返回 falseif [ $a -eq $b ]; then
    echo "$a -eq $b,a等于b ";
else
    echo "$a -eq $b,a不等于b "
fi

#-ne    检测两个数是否不相等,不相等返回 true。    [ $a -ne $b ] 返回 trueif [ $a -ne $b ]; then
    echo "$a -ne $b,a不等于b";
else
    echo "$a -ne $b,a等于b";
fi

#-gt    检测左边的数是否大于右边的,如果是,则返回 true。    [ $a -gt $b ] 返回 falseif [ $a -gt $b ]; then
    echo "a > b";
else
    echo "a < b";
fi

#-lt    检测左边的数是否小于右边的,如果是,则返回 true。    [ $a -lt $b ] 返回 trueif [ $a -lt $b ]; then
    echo "a < b";
else
    echo "a > b";
fi

#-ge    检测左边的数是否大于等于右边的,如果是,则返回 true。    [ $a -ge $b ] 返回 falseif [ $a -ge $b ]; then
    echo " a >= b";
else
    echo "a < b";
fi

#-le    检测左边的数是否小于等于右边的,如果是,则返回 true。    [ $a -le $b ] 返回 trueif [ $a -le $b ]; then
    echo "a <= b";
else
    echo "a > b";
fi

echo "######################布尔运算符################";
# !    非运算,表达式为 true 则返回 false,否则返回 true。    [ ! false ] 返回 trueif [ ! $a == $b ]; then
    echo "a 不等于 b"
fi

# -o    或运算,有一个表达式为 true 则返回 true。    [ $a -lt 20 -o $b -gt 100 ] 返回 trueif [ $a -lt 100 -o $b -gt 1 ]; then
    echo "-o ,或运算";
fi

#-a    与运算,两个表达式都为 true 才返回 true。    [ $a -lt 20 -a $b -gt 100 ] 返回 falseif [ $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 ] 返回 trueif [[ $a != $b ]]; 
then
    echo "字符串 a !=b";
fi

# -z    检测字符串长度是否为0,为0返回 true。    [ -z $a ] 返回 falseif [[ -z $a  ]]; then
    echo "\$a 为0";
else
    echo "$a 不为0";
fi

# -n    检测字符串长度是否不为 0,不为 0 返回 true。    [ -n "$a" ] 返回 trueif [ -n $a ]
then
    echo "\$a 长度不为0";
else
    echo "\$a 长度为0"        
fi

# $    检测字符串是否为空,不为空返回 true。    [ $a ] 返回 trueif [ $a ]
then
    echo "\$a 不为空";
fi

echo "######################文件测试运算符################";
file="C:\Users\EDZ\Desktop\shell\demo.txt";

# -b file    检测文件是否是块设备文件,如果是,则返回 true。    [ -b $file ] 返回 falseif [[ ! -b $file ]]; then
    echo "不是块设备文件";
fi

# -c file    检测文件是否是字符设备文件,如果是,则返回 true。    [ -c $file ] 返回 falseif [[ ! -c $file ]]; then
    echo "不是字符设备文件";
fi

# -d file    检测文件是否是目录,如果是,则返回 true。    [ -d $file ] 返回 falseif [ ! -d $file ];then
    echo "不是目录文件";
fi

# -f file    检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。    [ -f $file ] 返回 trueif [ -f $file ]; then
    echo "普通文件";
fi

# -g file    检测文件是否设置了 SGID 位,如果是,则返回 true。    [ -g $file ] 返回 falseif [ -g $file ];then
    echo "包含SGID";
else
    echo "没有包含SGID"
fi 

# -k file    检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。    [ -k $file ] 返回 falseif [ -k $file ];then
    echo "设置了粘着位";
else
    echo "没有设置粘着位";
fi

# -p file    检测文件是否是有名管道,如果是,则返回 true。    [ -p $file ] 返回 falseif [[ -p $file ]]; then
    echo "是有名管道"
else
    echo "不是有名管道";
fi

# -u file    检测文件是否设置了 SUID 位,如果是,则返回 true。    [ -u $file ] 返回 falseif [ -u $file ] ; then
    echo "是设置了SUID";
else
    echo "没有设置SUID";
fi 

# -r file    检测文件是否可读,如果是,则返回 true。    [ -r $file ] 返回 trueif [ -r $file ] ; then 
    echo "可读";
else
    echo "不可读";
fi

# -w file    检测文件是否可写,如果是,则返回 true。    [ -w $file ] 返回 trueif [ -w $file ];then
    echo "可写"
else
    echo "不可写";
fi

# -x file    检测文件是否可执行,如果是,则返回 true。    [ -x $file ] 返回 trueif [ -x $file ];then
    echo "可执行";
else
    echo "不可执行";
fi

# -s file    检测文件是否为空(文件大小是否大于0),不为空返回 true。    [ -s $file ] 返回 trueif [ -s $file ];then
    echo "文件不为空";
else
    echo "文件为空";
fi    

# -e file    检测文件(包括目录)是否存在,如果是,则返回 true。    [ -e $file ] 返回 trueif [ -e $file ];then 
    echo "文件存在";
else
    echo "文件不存在";    
fi 


echo "my name is zhangsan " > "C:\Users\EDZ\Desktop\shell\demo.txt";
posted on 2020-08-26 15:37  古越剑箫  阅读(131)  评论(0编辑  收藏  举报