Shell 表达式与运算符

防伪码:起床望明月,低头思故乡。

3 3 .1  条件表达式

表达式 实例
[ expression ]  [ 1 -eq 1 ]
[[ expression ]]  [[ 1 -eq 1 ]]
test expression  test 1 -eq 1 ,等同于[]

3 3 .2  整数比较符

比较符 描述 示例
-eq,equal 等于  [ 1 -eq 1 ]为 true
-ne,not equal 不等于 [ 1 -ne 1 ]为 false
-gt,greater than  大于 [ 2 -gt 1 ]为 true
-lt,lesser than  小于 [ 2 -lt 1 ]为 false
-ge,greater or equal 大于或等于   [ 2 -ge 1 ]为 true
-le,lesser or equal  小于或等于 [ 2 -le 1 ]为 false

3 3 .3  字符串比较符

运算符 描述 示例
==  等于 [ "a" == "a" ]为 true
!=  不等于 [ "a" != "a" ]为 false
>
大于,判断字符串时根据

ASCII 码表顺序,不常用


在[]表达式中:[ 2 \> 1 ]为 true

在[[]]表达式中:[[ 2 > 1 ]]为 true

在(())表达式中:(( 3 > 2 ))为 true

<
小于,判断字符串时根据

ASCII 码表顺序,不常用


在[]表达式中:[ 2 \< 1 ]为 false

在[[]]表达式中:[[ 2 < 1 ]]为 false

在(())表达式中:(( 3 < 2 ))为 false

>= 大于等于  在(())表达式中:(( 3 >= 2 ))为 true
<=  小于等于 在(())表达式中:(( 3 <= 2 ))为 false
-n   字符串长度不等于 0 为真
VAR1=1;VAR2=""

[ -n "$VAR1" ]为 true

[ -n "$VAR2" ]为 false

-z  字符串长度等于 0 为真 
VAR1=1;VAR2=""

[ -z "$VAR1" ]为 false

[ -z "$VAR2" ]为 true

str  字符串存在为真
VAR1=1;VAR2=""

[ $VAR1 ]为 true

[ $VAR2 ]为 false

需要注意的是,使用-z 或-n 判断字符串长度时,变量要加双引号。

举例说明:

# [ -z $a ] && echo yes || echo no

yes

# [ -n $a ] && echo yes || echo no

yes

# 加了双引号才能正常判断是否为空

# [ -z "$a" ] && echo yes || echo no

yes

# [ -n "$a" ] && echo yes || echo no

no

# 使用了双中括号就不用了双引号

# [[ -n $a ]] && echo yes || echo no

no

# [[ -z $a ]] && echo yes || echo no

yes

3 3 .4  文件测试

测试符 描述 示例
-e  文件或目录存在为真  [ -e path ] path 存在为 true
-f  文件存在为真 [ -f file_path ] 文件存在为 true
-d  目录存在为真  [ -d dir_path ] 目录存在为 true
-r  有读权限为真 [ -r file_path ] file_path 有读权限为 true
-w   有写权限为真 [ -w file_path ] file_path 有写权限为 true
-x  有执行权限为真 [ -x file_path ] file_path 有执行权限为 true
-s
文件存在并且大小大于

0 为真


[ -s file_path ] file_path 存在并且大小大于 0

为 true

3 3 .5  布尔运算符

运算符 描述 示例
!   非关系,条件结果取反  [ ! 1 -eq 2 ]为 true
-a 和关系,在[]表达式中使用  [ 1 -eq 1 -a 2 -eq 2 ]为 true
-o  或关系,在[]表达式中使用 [ 1 -eq 1 -o 2 -eq 1 ]为 true

3 3 .6  逻辑判断符

判断符 描述 示例
&&
逻辑和,在[[]]和(())表达式中

或判断表达式是否为真时使用


[[ 1 -eq 1 && 2 -eq 2 ]]为 true

(( 1 == 1 && 2 == 2 ))为 true

[ 1 -eq 1 ] && echo yes 如果&&前

面表达式为 true 则执行后面的

||
逻辑或,在[[]]和(())表达式中

或判断表达式是否为真时使用


[[ 1 -eq 1 || 2 -eq 1 ]]为 true

(( 1 == 1 || 2 == 2 ))为 true

[ 1 -eq 2 ] || echo yes 如果||前

面表达式为 false 则执行后面的

3 3 .7  整数运算

运算符 描述
+ 假发
- 减法
* 乘法
/ 除法
% 取余

运算表达式 示例
$(())  $((1+1))
$[]  $[1+1]

上面两个都不支持浮点运算。

$(())表达式还有一个用途,三目运算:

# 如果条件为真返回 1,否则返回 0

# echo $((1<0))

0

# echo $((1>0))

1

指定输出数字:

# echo $((1>0?1:2))

1

# echo $((1<0?1:2))

2

注意:返回值不支持字符串

3 3 .8  其他运算工具( let/ expr/bc )

除了 Shell 本身的算数运算表达式,还有几个命令支持复杂的算数运算:

命令 描述 示例
let 赋值并运算,支持++、--
let VAR=(1+2)*3 ; echo $VAR

x=10 ; y=5

let x++;echo $x 每执行一次 x 加 1

let y--;echo $y 每执行一次 y 减 1

let x+=2 每执行一次 x 加 2

let x-=2 每执行一次 x 减 2

expr 乘法*需要加反斜杠转义\*
expr 1 \* 2 运算符两边必须有空格

expr \( 1 + 2 \) \* 2 使用双括号时要转义

bc
计算器,支持浮点运算、

平方等


bc 本身就是一个计算器,可直接输入命令,进入解释器。

echo 1 + 2 |bc 将管道符前面标准输出作为 bc 的标准输入

echo "1.2+2" |bc

echo "10^10" |bc

echo ‘scale=2;10/3‘ |bc 用 scale 保留两位小数点

由于 Shell 不支持浮点数比较,可以借助 bc 来完成需求:

# echo "1.2 < 2" |bc

1

# echo "1.2 > 2" |bc

0

# echo "1.2 == 2.2" |bc

0

# echo "1.2 != 2.2" |bc

1

看出规律了嘛?运算如果为真返回 1,否则返回 0,写一个例子:

# [ $(echo "2.2 > 2" |bc) -eq 1 ] && echo yes || echo no

yes

# [ $(echo "2.2 < 2" |bc) -eq 1 ] && echo yes || echo no

no

expr 还可以对字符串操作:

获取字符串长度:

# expr length "string"

6

截取字符串:

# expr substr "string" 4 6

ing

获取字符在字符串中出现的位置:

# expr index "string" str

1

# expr index "string" i

4

获取字符串开始字符出现的长度:

# expr match "string" str

3

3 3 .9 l Shell  括号用途总结

看到这里,想一想里面所讲的小括号、中括号的用途,是不是有点懵逼了。那我们总结一下!


( )


用途 1:在运算中,先计算小括号里面的内容

用途 2:数组

用途 3:匹配分组

(( ))
用途 1:表达式,不支持-eq 这类的运算符。不支持-a 和-o,支持<=、>=、<、>这类

比较符和&&、||

用途 2:C 语言风格的 for(())表达式

$( ) 执行 Shell 命令,与反撇号等效
$(( ))
用途 1:简单算数运算

用途 2:支持三目运算符 $(( 表达式?数字:数字 ))

[ ] 条件表达式,里面不支持逻辑判断符
[[ ]]
条件表达式,里面不支持-a 和-o,不支持<=和>=比较符,支持-eq、<、>这类比较

符。支持=~模式匹配,也可以不用双引号也不会影响原意,比[]更加通用

$[ ]  简单算数运算
{ }
对逗号(,)和点点(...)起作用,比如 touch {1,2}创建 1 和 2 文件,touch

{1..3}创建 1、2 和 3 文件

${ }
用途 1:引用变量

用途 2:字符串处理

时间: 2024-10-28 10:15:57

Shell 表达式与运算符的相关文章

第三章 Shell表达式与运算符

2.1 条件表达式 表达式 示例 [ expression ] [ 1 -eq 1 ]  [[ expression ]] [[ 1 -eq 1 ]] test expression test 1 -eq 1 ,等同于[] 2.2 整数比较符 比较符 描述 示例 -eq,equal 等于 [ 1 -eq 1 ]为true -ne,not equal 不等于 [ 1 -ne 1 ]为false -gt,greater than 大于 [ 2 -gt 1 ]为true -lt,lesser than

第三章 Shell 表达式与运算符

原文地址:https://www.cnblogs.com/ApolloZ/p/11604511.html

linux shell &ldquo;(())&rdquo; 双括号运算符使用

linux shell "(())" 双括号运算符使用 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构语句,就是对shell中算数及赋值运算的扩展.   使用方法: 语法: ((表达式1,表达式2-)) 特点: 1.在双括号结构中,所有表

shell 6基本运算符

shell支持多种运算符: * 算数运算符 * 关系运算符 * 布尔运算符 * 字符串运算符 * 文件测试运算符 算数运算符 + 加 `expr $a + $b` 结果为 30 - 减 `expr $a - $b` 结果为 -10 * 乘 `expr $a \* $b` 结果为 200 / 除 `expr $b / $a` 结果为 2 % 取余 `expr $b % $a` 结果为 0 = 赋值 a=$b 将把变量 b 的值赋给 a == 相等,用于比较2个数字 [ $a == $b ] 返回

第三章 shell编程之运算符

shell编程之运算符 一 shell变量的缺点 弱类型: 默认字符串型: 二 declare声明变量类型 格式:declare [+/-][选项] 变量名 -:给变量设定类型属性: +:取消变量的类型属性: -a:将变量声明为数组型:

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q

shell的替换运算符和模式匹配运算符

shell 的替换运算符和模式匹配运算符 替换运算符: (1) ${varname:-word}       :如果varname存在且非null,则返回其值:否则,返回word. (2) ${varname:=word}      :如果varname存在且非null, 则返回其值,否则,设置其为word并返回. (3) ${varname:?message} :如果varname存在且非null,则返回其值,否则,返回 varname:message,并退出当前的命令或脚本.省略messag

PHP_零基础学php_2变量、预定义变量、预定义常量、表达式、运算符、程序控制流程

1.变量 PHP中使用$后跟变量名表示一个变量,变量名区分大小写. 变量的数据类型 整数类型 浮点类型 字符串类型 布尔类型 数组类型 对象 <html> <head> <title>php</title> </head> <body> /* 整数类型:可以在php中指定的整数包括十进制.八进制.和十六进制,整形数值前可以加上符号“+”或“-” */ $i=2468;//指定一个十进制整数 $i=-2468;//指定一个十进制负数 $

让我们来看一看C++ 三.表达式与运算符

所谓表达式,就是由数字.运算符号.约束变量等以能求得数值的有意义的排列方式形成的组合,我们平时说的算式,去掉得数和等号后就是一个表达式. 变量.数字什么的,看过第二章的读者应该都懂了,我这里要讲的是运算符号. 在我们日常生活中,运算符号不外乎+ - × ÷ 一类,在C++中,可以直接完成的运算有五种,分别是加法(+).减法(-).乘法(*).整除(/)和去余(%). 首先乘法并不是用×来表示的,这是因为,那个符号在我们使用的各式各样的键盘配位中,都是一个很难打出的符号,而*只需要左手左移,右手上