【Shell教程】三----运算符,条件判断
2023-09-11 14:21:44 时间
算数运算符
Shell支持多种运算符
基本语法:
可以用
“$((运算式))”
或
“$[运算式]”
来进行加减乘除计算
echo "$[2+2]"
echo "$((2+2))"
输出:
来进行运算式计算
或者使用expr命令
ecpr 2 + 2
注意:
- 表达式和运算符之间要有空格, 2+2 是不对的,必须写成 2 + 2,
- 完整的表达式要被 ` `反引号 括住
例: 计算(2+3)X4的值
expr `expr 2 + 3` \* 4
输出:
例: 计算2+2的值
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
输出: 两数之和为 : 4
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b` 结果为 30 |
- | 减法 | `expr $a - $b` 结果为 -10 |
* | 乘法 | `expr $a * $b` 结果为 200 |
/ | 除法 | `expr $b / $a` 结果为 2 |
% | 取余 | `expr $b % $a` 结果为 0 |
= | 赋值 | a=$b 把变量 b 的值赋给 a |
= | 赋值 | a=$b 把变量 b 的值赋给 a |
== | 相等,用于比较两个数字,相同则返回 true | [ $a == $b ] 必须要有空格! |
!= | 不相等,用于比较两个数字,不相同则返回 true | [ $a != $b ] |
注意: 在乘法中,系统默认号问一个符号,而不是乘号,所以需要使用转义符号 \ 来帮助系统识别这里是一个乘号
格式 a \ b
测试:
#!/bin/bash
a=10
b=20
result=`expr $a + $b`
echo "a + b = $result"
result=`expr $a - $b`
echo "a - b = $result"
result=`expr $a \* $b`
echo "a * b = $result"
result=`expr $b / $a`
echo "b / a = $result"
result=`expr $b % $a`
echo "b % a = $result"
输出:
关系运算符
运算符 | 说明 | 举例 |
---|---|---|
-eq | == equal的缩写,相等 | [ $a -eq $b ] |
-ne | != not equal的缩写,不相等 | [ $a -nq $b ] |
-gt | > greater thanl的缩写,大于,如果左边大于右边,返回true,否则返回false | [ $a -gt $b ] |
-lt | < little thanl的缩写,小于,如果左边小于右边,返回true,否则返回false | [ $a -lt $b ] |
-ge | >= 大于等于,如果左边大于等于右边,返回true,否则返回false | [ $a -ge $b ] |
-le | <= 小于等于,如果左边小于等于右边,返回true,否则返回false | [ $a -le $b ] |
注意:
- 注意两侧留空格,[ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]
- 只支持整数比较 shell中定义整数: declare -i xxx
#!/bin/bash
a=20
b=10
if [ $a -eq $b ]
then
echo "eq 关系运算结果: a等于b"
else
echo "eq 关系运算结果: a不等于b"
fi
if [ $a -ne $b ]
then
echo "ne 关系运算结果: a不等于b"
else
echo "ne 关系运算结果: a等于b"
fi
if [ $a -gt $b ]
then
echo "gt 关系运算结果: a大于b"
else
echo "gt 关系运算结果: a小于等于b"
fi
if [ $a -lt $b ]
then
echo "lt 关系运算结果:a小于b"
else
echo "lt 关系运算结果:a大于等于b"
fi
if [ $a -ge $b ]
then
echo "ge 关系运算结果:a大于等于b"
else
echo "ge 关系运算结果:a小于b"
fi
if [ $a -le $b ]
then
echo "le 关系运算结果:a小于等于b"
else
echo "le 关系运算结果:a大于b"
fi
输出:
逻辑运算符
运算符 | 说明 | 举例 |
---|---|---|
-a | && 与运算,两个表达式都为true,才返回true | [ $a -a $b ] |
-o | || 或运算,有一个表达式都为true,则返回true | [ $a -o $b ] |
! | ! 非运算,表达式为true,则返回false 为false ,则返回true | [ ! $a ] |
如果是两个[[ ]] 括起来,则可以使用&& 和||
也就是:
- [ ]中用 -a,-o, !
- [[ ]]中用 &&,||, !
测试:
#!/bin/bash
a=20
b=10
c=10
if [ $a = $b -a $b = $c ]
then
echo "a,b,c 相等"
else
echo "a,b,c 不相等"
fi
if [ $a = $b -o $b = $c ]
then
echo "a等于b 或 b等于c "
else
echo "a,b,c 不相等"
fi
输出:
测试:
#!/bin/bash
a=20
b=10
c=10
if [[ $a = $b && $b = $c ]]
then
echo "a,b,c 相等"
else
echo "a,b,c 不相等"
fi
if [[ $a = $b || $b = $c ]]
then
echo "a等于b 或 b等于c "
else
echo "a,b,c 不相等"
fi
输出:
字符串运算符
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true | [ $a = $b ] |
!= | 检测两个字符串是否不相等,不相等返回 true | [ $a != $b ] |
-z | 检测字符串长度是否为0,为0返回 true | [ -z $a ] |
-n | 检测字符串长度是否空字符串,不是空字符串返回 true | [ -n “$a” ] |
文件测试运算符
文件权限判断
运算符 | 说明 | 举例 |
---|---|---|
-r | read 文件是否可读 如果是,则返回true | [ -r $file ] |
-w | 检测文件是否可写,如果是,则返回true | [ -w $file ] |
-x | 检测文件是否有执行的权限,如果有,则返回true | [ -x $file ] |
测试:
#!/bin/bash
if [ -r hello.c ]
then
echo "当前用户可读此文件"
else
echo "当前用户没有读此文件的权限"
fi
if [ -w hello.c ]
then
echo "当前用户可写此文件"
else
echo "当前用户没有写此文件的权限"
fi
if [ -x hello.c ]
then
echo "当前用户可以执行此文件"
else
echo "当前用户没有执行此文件的权限"
fi
输出:
测试:
文件类型判断
运算符 | 说明 | 举例 |
---|---|---|
-e | 检测文件(包括目录)是否存在,如果是,则返回 true | [ -e $file ] |
-s | 检测文件是否为空,不为空返回 true | [ -s $file ] |
-d | 检测文件是否是目录,如果是,则返回 true | [ -d $file ] |
-f | 检测文件是否是存在且为普通文件(既不是目录,也不是设备文件),如果是,则返回 true | [ -f $file ] |
#!/bin/bash
if [ -e hello.c ]
then
echo "文件已经存在"
else
echo "文件不存在"
fi
if [ -s hello.c ]
then
echo "此文件大小不为0"
else
echo "此文件大小为0,即文件内容为空"
fi
if [ -d hello.c ]
then
echo "是目录"
else
echo "不是目录"
fi
if [ -f hello.c ]
then
echo "该文件是普通文件"
else
echo "该文件不是普通文件"
fi
输出:
相关文章
- springboot+shiro+redis(单机redis版)整合教程
- shell教程一:字符串操作
- 获取shell脚本自身所在目录的Shell脚本分享
- bash 教程-5 shell 流程控制 条件判断 重定向 read [MD]
- bash 教程-3 shell 变量 数组 算术表达式 函数 [MD]
- bash 教程-2 shell 字符串 转义 模式扩展 特殊符号 [MD]
- bash 教程-1 shell 基础 快捷键 目录堆栈 操作历史 [MD]
- Linux Shell脚本自动化编程实战-shell变量(二)
- 【OpenCV-Python】教程:8-2 图像修复 Image Inpainting
- SAP UI5 应用开发教程之一百零二 - SAP UI5 应用的打印(Print)功能实现详解试读版
- Atitit. 包厢记时系统 的说明,教程,维护,故障排查手册v2 pb25.doc
- Py之GUI之PyQt:PyQt的简介、入门、安装(QtCreator/QtDesigner安装图文教程)、经典案例之详细攻略
- Tool之Adobe:解决Adobe acrobat pro将PDF文件进行批量保存单页PDF文件(图文教程)
- ❤️【保姆级教程】从零到精通Git,CodeChina实战❤️
- nodejs v8引擎c++编译版本号升级教程
- 【极简教程】Linux Shell 脚本编程
- 最新版windows安装支持输入shell命令的工具cygwin教程
- [译]Vulkan教程(30)深度缓存
- 19.第六章 Shell脚本编程基础入门 -- shell 脚本语言的基本用法(二)
- leaflet 示例教程100+ 目录
- 华为云计算之物理节点CNA安装教程
- MYSQL提权之反弹SHELL——数据库提权属于webshell到管理员的纵向提权,本质还是利用udf提权,无非是在mysql自定义函数中使用了反弹shell而已
- MySQL-mysql 8.0.11安装教程 windows
- 【Impala教程】(三)Impala Shell命令
- shell - 01 - Shell入门:扎好马步 走的更稳
- ansible实战应用系列教程7:管理facts
- Linux下CMake简明教程(八) 添加编译选项