Linux Shell基本运算符浅讲解

                            网上学习,结合自己整理 ,有侵则删 ,分享出来大家共同进步

shell基本运算符包括:

1.算术运算符

算术运算符

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 	说明 	举例
+ 	加法 	`expr $a + $b` 结果为 30。
- 	减法 	`expr $a - $b` 结果为 -10。
* 	乘法 	`expr $a \* $b` 结果为  200。
/ 	除法 	`expr $b / $a` 结果为 2。
% 	取余 	`expr $b % $a` 结果为 0。
= 	赋值 	a=$b 把变量 b 的值赋给 a。
== 	相等。用于比较两个数字,相同则返回 true。 	[ $a == $b ] 返回 false。
!= 	不相等。用于比较两个数字,不相同则返回 true。 	[ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。

备注:乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
#! /bin/bash

a=10
b=20
t=21
#e=20
read -p "Pls input e vaule" e
echo  "you input e = $e"

echo  -e "a = $a,   b = $b"

c=`expr $a + $b`
echo  "c=a+b, c = $c"

c=`expr $b - $a`
echo  "c=b-a, c = $c"

#d=`expr $a * $b`
d=`expr $a \* $b`
echo  "d = a*b, d = $d"

c=`expr $b / $c`
echo  "c=a / b, c = $c"

c=`expr $b % $a`
echo  "c=b % a, c = $c"

c=`expr $t % $a`
echo  "c=t % a, c = $c"


#c=`expr $a == $b`
#echo  "a==b??? c = $c"

if [ $e == $b ]; then
        echo  "e = $e, b = $b, so $e == $b is true"
else
        echo  "e = $e, b = $b, so $e == $b is false"
fi

2.关系运算符 

关系运算符只针对数字,不支持字符串运算

运算符 	说明 	举例
-eq 	检测两个数是否相等,相等返回 true。 	[ $a -eq $b ] 返回 false。
-ne 	检测两个数是否不相等,不相等返回 true。 	[ $a -ne $b ] 返回 true。
-gt 	检测左边的数是否大于右边的,如果是,则返回 true。 	[ $a -gt $b ] 返回 false。
-lt 	检测左边的数是否小于右边的,如果是,则返回 true。 	[ $a -lt $b ] 返回 true。
-ge 	检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 	检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

其实简单理解,就是C语音中的“=, !=,   >,    < ,  >= ,  <=” ,采用类比C语音那样就理解就可以,shell语法上稍微注意即可,这里就不写Demo了

#! /bin/bash

read -p "Pls input value of a " a
echo  "a=$a"

read -p "Pls input value of b " b
echo  "b=$b"

if [ $a -ge $b ]; then
        echo  "$a  >= $b is true "
else
        echo  "$a  >= $b is false "
fi


if [ $a -le $b ]; then
        echo  "$a  <= $b is true "
else
        echo  "$a  <= $b is false "
fi


if [ $a -gt $b ]; then
        echo  "$a  > $b is true "
else
        echo  "$a  > $b is false "
fi

if [ $a -lt $b ]; then
        echo  "$a  < $b is true "
else
        echo  "$a  < $b is false "
fi


if [ $a -eq $b ]; then
        echo  "$a  = $b is true "
else
        echo  "$a  = $b is false "
fi


if [ $a -ne $b ]; then
        echo  "$a  != $b is true "
else
        echo  "$a  != $b is false "
fi

 

3.布尔运算

运算符 	说明 	举例
! 	非运算,表达式为 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

其实也都很好理解,类比C语音即可。

#! /bin/bash

read -p "Pls input value of a " a
echo  "a=$a"

read -p "Pls input value of b " b
echo  "b=$b"

if [ $a != $b ]; then
        echo "$a != $b : a 不等于 b"
else
        echo "$a == $b : a 等于 b"
fi

if [ $a -lt 100 -a $b -gt 15 ];then
         echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
         echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi


if [ $a -lt 100 -o $b -gt 100 ];then
         echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
         echo "$a 小于 100 或 $b 大于 100 : 返回 true"
fi


4.逻辑运算符

运算符 	说明 	举例
&& 	逻辑的 AND 	[[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 	逻辑的 OR 	[[ $a -lt 100 || $b -gt 100 ]] 返回 true
#! /bin/bash

read -p "Pls input value of a " a
echo  "a=$a"

read -p "Pls input value of b " b
echo  "b=$b"

#Note: demo error
#if [ [$a -lt 100 && $b -gt 10] ]; then
#if [[$a -lt 100 && $b -gt 10]]; then

if [[ $a -lt 100 && $b -gt 10 ]]; then
        echo  "$a < 100 && $b > 10 is true"
fi


if [[ $a -lt 100 && $b -gt 10 ]]; then
        echo  "$a < 100 && $b > 10 is true"
else
        echo  "$a < 100 && $b > 10 is false"
fi


if [[ $a -le 100 || $b -ge 10 ]]; then
        echo  "$a <= 100 || $b >= 10 is true"
else
        echo  "$a <= 100 || $b >= 10 is false"
fi

 4.字符串运算符

= 	检测两个字符串是否相等,相等返回 true。 	[ $a = $b ] 返回 false。
!= 	检测两个字符串是否不相等,不相等返回 true。 	[ $a != $b ] 返回 true。
-z 	检测字符串长度是否为0,为0返回 true。 	[ -z $a ] 返回 false。
-n 	检测字符串长度是否不为 0,不为 0 返回 true。 	[ -n "$a" ] 返回 true。
$ 	检测字符串是否不为空,不为空返回 true。 	[ $a ] 返回 true。

备注:注意数值运算符的“=”和字符运算符的“=”两者的区别,前者是作为赋值运算,后者则是判断字符是否相同

#! /bin/bash

#read -p "Pls input string of a " a
#echo  "a=$a"
#
#read -p "Pls input string of b " b
#echo  "b=$b"
#

read -p "Pls input string of a " a
if [ $a ]; then
        echo "your input "$a""
        echo  "检测$a字符串是否不为空,不为空返回 true"
else
        echo  "Input nothings, Pls check it again!"
fi

read -p "Pls input string of b " b
if [ $b ]; then
        echo "your input "$b""
        echo  "检测$b字符串是否不为空,不为空返回 true"
else
        echo  "Input nothings $b, Pls check it again!"
fi

if [ -z $a ];then
        echo  "$a is zero, return true"
else
        echo  "$a is not  zero, return false"
fi

if [ -n $b ];then
        echo "检测$b字符串长度是否不为 0,不为 0 返回 true"
else
        echo "检测$b字符串长度是否为 0,不为 0 返回 false"
fi

if [ $a != $b ];then
        echo "$a != $b is true."
else
        echo "$a != $b is false."
fi

 

 5.文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。


操作符 	说明 	举例
-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。


其他检查符:
    -S: 判断某文件是否 socket。
    -L: 检测文件是否存在并且是一个符号链接。 

#! /bin/bash
#file="/home/hzs/rockchip-sdk/bin/a/bin/0619/"

PATH=`realpath $0`
echo "My PATH name is ${PATH}"

if [ -x $PATH ];then
        echo  "$PATH  文件可执行"
else
        echo  "$PATH 文件不可执行"
fi

if [ -r $PATH ];then
        echo  "$PATH  文件可执行read"
else
        echo  "$PATH 文件不可执行read"
fi

if [ -d $PATH ];then
        echo  "$PATH  directory"
else
        echo  "$PATH  not directory"
fi

if [ -e $PATH ];then
        echo  "$PATH  文件可exit true"
else
        echo  "$PATH 文件可exit false"
fi

if [ -w $PATH ];then
        echo  "$PATH  文件可执行write"
else
        echo  "$PATH 文件不可执行write"
fi


if [ -L $PATH ];then
        echo  "$PATH  检测文件是存在并且是一个符号链接 true"
else
        echo  "$PATH  检测文件是否存在并且是一个符号链接 false"
fi

最后来个很nice 的demo结束:

#! /bin/bash

while true

#read -p "Pls select your favourite Web" choice
do
        read -p "Pls select your favourite Web " choice
        echo  "You input $choice"

        case $choice in
                1)
                        echo  "your $choice Web: www.baidu.com"
                ;;
                2)
                        echo  "your $choice Web: www.google.com"
                ;;
                3)
                        echo  "your $choice Web: www.three.com"
                ;;
                *)
                        echo  "your do not choice,show  Web: www.other.com"
                        #continue
                        echo  "it is game over"
                        break
                ;;
        esac

done

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值