#!/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:\Users\EDZ\Desktop\shell\demo.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:\Users\EDZ\Desktop\shell\demo.txt";