首页 > 系统相关 >Shell浅浅谈(六)轻松掌握基本运算符

Shell浅浅谈(六)轻松掌握基本运算符

时间:2024-12-11 22:31:10浏览次数:11  
标签:10 Shell 浅浅 value echo 运算符 num true

Shell 支持多种运算符,包括:

  • 算术运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

以下是各类运算符的详细说明和实例。


一. 算术运算符

特点

  1. 使用 expr 命令计算表达式。
  2. 表达式和运算符之间需要空格⭐。
  3. 反引号` `包裹表达式。

运算符说明

运算符说明示例
+加法expr $a + $b
-减法expr $a - $b
*乘法(需加反斜杠)expr $a \* $b
/除法expr $b / $a
%取余expr $b % $a
=赋值a=$b
==检测是否相等(数字)[ $a == $b ]
!=检测是否不等(数字)[ $a != $b ]

示例代码:

#!/bin/bash

value_1=10
value_2=20

# 加法
#!/bin/bash

value_1=10
value_2=20

# 加法
value_3=`expr $value_1 + $value_2`
echo $value_3 #30

# 减法
value_3=`expr $value_1 - $value_2`
echo $value_3 #-10

# 乘法,特殊符号需转义
value_3=`expr $value_1 \* $value_2`
echo $value_3 #200

# 除法
value_3=`expr $value_2 / $value_1`
echo $value_3 #2

# 取余
value_3=`expr $value_1 % $value_2`
echo $value_3 #10

# 赋值,等号左右无空格
value_3=$value_2
echo $value_3 #20

# 输出 10 不等于 20

# 注意if和[之间以及 []和条件之间以及 == 左右需要空格
if [ $value_1 == $value_2 ]
then
echo "$value_1 等于 $value_2"fi

if [ $value_1 != $value_2 ]
then
echo "$value_1 不等于 $value_2"fi
fi

二. 关系运算符

仅支持数字比较。

运算符说明示例
-eq检测是否相等,相等返回 true[ $a -eq $b ]
-ne检测是否不相等,不相等返回 true[ $a -ne $b ]
-gt检测是否大于,大于返回 true[ $a -gt $b ]
-lt检测是否小于,小于返回 true[ $a -lt $b ]
-ge检测是否大于等于,大于等于返回 true[ $a -ge $b ]
-le检测是否小于等于,小于等于返回 true[ $a -le $b ]

示例代码:

a=10
b=20

# printf: 10 != 20
if [ $a -eq $b ]
then
    echo "$a == $b"
else
    echo "$a != $b"
fi

# printf: 10 != 20
if [ $a -ne $b ]
then
    echo "$a != $b"
else
    echo "$a == $b"
fi

# printf: 10 <= 20
if [ $a -gt $b ]
then
    echo "$a > $b"
else
    echo "$a <= $b"
fi

# printf: 10 < 20
if [ $a -lt $b ]
then
    echo "$a < $b"
else
    echo "$a >= $b"
fi

# printf: 10 < 20
if [ $a -ge $b ]
then
    echo "$a >= $b"
else
    echo "$a < $b"
fi

# printf: 10 <= 20
if [ $a -le $b ]
then
    echo "$a <= $b"
else
    echo "$a > $b"
fi

布尔运算符

运算符说明示例
!非运算! ( $value_1 -gt $value_2 )
-o或运算(任意 true)[ $a -lt 20 -o $b -gt 100 ]
-a与运算(全为 true)[ $a -lt 20 -a $b -gt 100 ]

示例代码:

value_1=10
value_2=20

#return true
if [ ! \( $value_1 -gt $value_2 \) ] # 括号记得转义
then 
    echo "return true"
else
    echo "return false"
fi

# return true
if [ \( $value_1 -gt $value_2 \) -o \( $value_2 -gt $value_1 \) ]
then
    echo "return true"
else
    echo "return false"
fi


# return false
if [ \( $value_1 -gt $value_2 \) -a \( $value_2 -gt $value_1 \) ]
then
    echo "return true"
else
    echo "return false"
fi

逻辑运算符

运算符说明示例
&&逻辑与[[ $a -lt 100 && $b -gt 100 ]]
||逻辑或[[ $a -lt 100 || $b -gt 100 ]]

示例代码:

value_1=10
value_2=20

# printf: false
# 注意[[……]]结构才支持逻辑运算符
if [[ $value_1 -gt $value_2 && $value_1 -lt $value_2 ]];then
    echo "return true"
else
    echo "return false"
fi

# printf: true
if [[ $value_1 -gt $value_2 || $value_1 -lt $value_2 ]];then
    echo "return true"
else
    echo "return false"
fi

字符串运算符

运算符说明示例
=检测字符串是否相等[ $a = $b ] 返回 false
!=检测字符串是否不相等[ $a != $b ] 返回 true
-z检测字符串长度是否为 0[ -z $a ] 返回 false
-n检测字符串长度是否不为 0[ -n "$a" ] 返回 true
$检测字符串是否非空[ $a ] 返回 true

示例代码:

value_1="hello"
value_2="world"
value_3=""

# printf: false
if [ $value_1 = $value_2 ];then
    echo "return true"
else 
    echo "return false"
fi

# printf: true
if [ $value_1 != $value_2 ];then
    echo "return true"
else 
    echo "return false"
fi

# printf: The length of value_3 is zero
if [ -z $value_3 ];then
    echo "The length of value_3 is zero"
else
    echo "The length of value_3 is not zero"
fi

# printf: The length of value_2 is not zero
if [ -n "$value_2" ];then
    echo "The length of value_2 is not zero"
else
    echo "The length of value_2 is zero"
fi

# printf: Then value_3 is empty
if [ $value_3 ];then
    echo "Then value_3 is not empty"
else 
    echo "Then value_3 is empty"
fi

文件测试运算符

操作符说明示例
-b块设备文件[ -b $file ]
-c字符设备文件[ -c $file ]
-d目录[ -d $file ]
-f普通文件(非目录或设备文件)[ -f $file ]
-gSGID 设置[ -g $file ]
-k粘着位设置[ -k $file ]
-p有名管道[ -p $file ]
-uSUID 设置[ -u $file ]
-r可读文件[ -r $file ]
-w可写文件[ -w $file ]
-x可执行文件[ -x $file ]
-s非空文件[ -s $file ]
-e文件或目录存在[ -e $file ]

自增与自减

Shell 支持通过以下方式实现自增和自减:

方法 1:let

let num++
let num-=10

代码示例:

declare -i num_1=5
let num_1++
echo ${num_1} # 6
let num_1-=10
echo ${num_1} # -4

方法 2:$(( ))

num=$((num + 1))
num=$((num - 1))

代码示例:

declare -i num_1=5
num_1=$((num_1+1))
echo ${num_1} # 6
num_1=$((num_1-10))
echo ${num_1} # -4

方法 3:expr

num=$(expr $num + 1)
num=$(expr $num - 1)

代码示例:

declare -i num_1=5
num_1=$(expr $num_1 + 1)
echo ${num_1} # 6
num_1=$(expr $num_1 - 10)
echo ${num_1} # -4

方法 4:(( ))

((num++))
((num--))

代码示例:

declare -i num_1=5
((num_1++))
echo ${num_1} # 6
((num_1-=10))
echo ${num_1} # -4

标签:10,Shell,浅浅,value,echo,运算符,num,true
From: https://blog.csdn.net/m0_73756108/article/details/144377108

相关文章

  • Shell浅浅谈(三)Shell 变量与操作详解
    1.变量基础1.1定义变量语法:variable_name=value注意事项:变量名和等号之间不能有空格变量名规则:只能包含字母、数字和下划线_,例如hello_world="helloword"。不能以数字开头,例如1aaa则不行。避免使用Shell关键字,这是所有语言都需要注意的。1.2使用变量使......
  • 运算符重载
    运算符重载运算符重载是C++语言中的一种特性,它允许程序员为自定义类型(如类或结构体)指定运算符的行为。通过运算符重载,自定义类型的对象可以使用内置的运算符(如+、-、*、/等)进行操作,从而使代码更加直观和易于理解。如何在C++中进行运算符重载在C++中,运算符重载是通过定义成员......
  • powershell配置
    powershell配置0.结果展示1.配置输出符号functionPrompt{ $curdir="$(Get-Location)".Split("\")|Select-Object-Last1 return"⚡"+$curdir+"......
  • 瑞数纯算心得-解三目运算符
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关常谈的就是瑞数vmp的三目运算符,卡住了一片人,4,5代基本都是ifelse控制流形式相当于三目......
  • #渗透测试#红队攻防 kioptix level 2靶机getshell及提权
    声明!文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!目录标题一、准备阶段1.找出ip端口和服务信息扫出ip扫出端口端口对应服务信息2.目录扫描3.漏洞扫描nmap扫描漏洞searchsploit查找漏洞二、获取权限1.访......
  • Linux shell字符串截取
    原文参考https://www.cnblogs.com/cavan2021/p/17484032.html自己试过之后,觉得有些地方需要进一步说明,写一点自己的理解。一、从指定位置截取,截掉左边,保留右边${string:start:length}从string字符串的左数第start个字符开始,向右截取 length个字符。${string:start}从......
  • Shell程序设计语言及其脚本和注释
    Shell程序设计语言及其脚本和注释认识Shell编程语言的种类机器语言:站在计算机(奴隶)的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件;优点:执行效率最高缺点:1、二进制指令难以记忆,开发时极容易出错;2、开发程序的复杂度高:即便是完成一个简单的功能,需要......
  • 举例说明+运算符的运行机制
    在前端开发中,+运算符主要有两种作用:加法和字符串连接。它的运行机制取决于操作数的数据类型。1.加法:当两个操作数都是数字或可以转换为数字的值时,+运算符执行加法运算。例子1:两个数字相加leta=5;letb=10;letc=a+b;//c的值为15console.log(c);//输出......
  • MySQL 运算符
    主要介绍MySQL的运算符及运算符的优先级。MySQL主要有以下几种运算符:算术运算符比较运算符逻辑运算符位运算符算术运算符MySQL支持的算术运算符包括:运算符作用+加法-减法*乘法/或DIV除法%或MOD取余在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL......
  • PowerShell一键下载Nuget某个包的所有版本
    一转眼好几年没有写博客了,来博客园冒个泡,最近由于工作需要,内网办公,幸运的是只需要上传一个*.nupkg一个包信息就可以在私有nuget下载到了,下面就用PowerShell编写下载脚本,需要注意的是PowerShell后缀ps1(最后一个数字1),以Newtonsoft.Json为例:下载地址#设置NuGet包列表的URL$packa......