`
天梯梦
  • 浏览: 13742533 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Shell入门教程:算术运算

 
阅读更多

Bash的算术运算有以下几种方法:

序号 名称 语法 范例
1 算术扩展 $((算术式)) r=$((2+5*8))
2 使用外部程序 expr 算术式 r=`expr 4 + 5`
3 使用 $[] $[算术式] r=$[4+5]
4 使用内置命令 declare declare -i 变量=算式式 declare -i r=8+16
5 使用内置命令 let let 算术式 let r=8+16

 

第一节:算术扩展

算术扩展语法:$((算术式))

如果表达式中有变量,该变量名称之前最好不要加$这个符号,以免该变量不存在时,造成语法的错误。

例如:

unset i
echo $((12+$i))

 

由于变量i不存在(行1),所以行2会变成:echo $((12+)),这样语法就错了。

但如果写成:

echo $((12+i))

 

这样可正确执行,因为 12+i 在$(())中是一个合法的算术表达式,就算变量i不存在,仍然可正确计算(结果为 12)。

 

如果表达式中有“变量扩展”,则要加上$,例如: echo $((${j:-8}+2))。

这里强化一下印象:

$((12+i)) 正确范例
$((12+$i)) 当i不存在时,语法错误,不建议使用
$((12+${i})) 当i不存在时,语法错误,不建议使用
$((${j:-8}+2)) 表达式中有“变量扩展”的正确范例

 

以下是各种简单的算术运用:

1、加 r=$((6+5)):r的值为11。

2、减 r=$((6-5)):r的值为1。

3、乘 r=$((6*5)):r的值为30。

4、除 r=$((6/5)):r的值为1。注意,这是整除。

5、求余数 r=$((32%3)):r的值为2。

 

6、递增 1

r=6
r=$((++r))

行2,r的值加1后,在赋值给r,因此,r的值递增1,变成7。

 

7、递减1

r=6
r=$((--r))

行2,r的值减1后,再赋值给r,因此,r的值递减1,变成5.

 

8、运算后减1

m=6
r=$((4+m--))

行2,m的值先代入6,和4做加法运算,得值为10,再赋值给r。接着,m的值减1。运算结果:r=10,m=5。

 

如果要对变量本身做单元的算术运算,可使用 (()) 含括,这一点和 C 语言的语法很像。

如下所示:

1、指定运算

((i=168))

设定变量i的值为168

 

2、后置式递增

i=168
((i++))

i的值加1,变成169。

第2行改成前置式递增 ((++i)) 也可以。

 

3、后置式递减

i=168
((i--))

i的值减1,变成167.

第2行改成前置式递减 ((--i)) 也可以。

 

4、+= , -= , *= , /= 等 赋值运算

i=168
((i+=60))

i+=60 的意思同于 i=i+60,即i加上60后,把运算结果再赋值给i,i的值变成228。

 

5、三元表达式

i=168
((n=i<100?50:80))
echo $n

(()) 的用户其实和 let 的效果是一样的,例如:((i++)) 和 let "i++" 执行结果相同。可以把上述的 (())的用法都改用 let 来做。

 

第二节:使用外部程序 expr 做算术运算

 

外部程序 expr 本来作用,是在“标准输出”显示表示式的值。语法为:

expr '算术式'

 例如:

expr 3 + 2

 

它会在屏幕上显示 5。

利用这个特性,expr 就可以拿来当做一种算术运算的工具。而且,由于它是外部程序,和Shell的版本没什么关系,几乎在各种操作系统平台上都可以执行。因此,如果注重跨平台、可移植性,在script程序的开发上可以使用expr替代其他算术方法。

 

在使用expr时,要特别注意“算术式”中是否含有bash shell的特殊字符,如 *、|、<、>、!、&、(、)等。如果有的话,要用 \ 予以转义,否则会出现奇怪的错误信息。

 

另外,在“算术式”中,运算符合操作数之间,至少要有一个以上的空格符隔开

以下是 expr 的范例(请注意,这里是使用一对 ` 符号含括,而不是单引号):

r=`expr 参数1 \| 参数2`

| 代表“或”之意。如果“参数1”存在、非空、不是0,则传回“参数1”的值,否则,传回“参数2”的值。由于 | 是特殊字符,所以要写成转义字符 \| 。

 

用例:

r=`expr 3 \| 0`

 

r的值为3。

r=`expr 0 \| 2`

r的值为2。

 

2、r=`expr 参数1 \& 参数2`

如果“参数1”和“参数2”皆存在、非空、不是0,则传回“参数1”的值,否则传回0。

用例:

r=`expr 3 \& 0`

 

3、加

r=`expr 4 + 5`

r的值为9。

 

4、减

r=`expr 4 - 5`

r的值为-1。

 

5、递减1

r=5
r=`expr $r + 1`
 

第三节:使用$[]做算术运算

 

使用$[]做算术运算和$(())类似。

语法:r=$[算术式]

以下列出简单的算术运用:

1、加:r=$[4+5]

2、减:r=$[4-5]

3、乘:r=$[4*5]

4、除:r=$[22/5] (整除)

5、求余数:r=$[100%43],r的值为14。

6、递增1

r=5
r=$[r+1]

 

第四节:使用内置命令 declare 做算术运算

语法:declare -i 变量=算式式

例如:

declare -i k
k=8+16

echo $k

行1,使用declare事先设定变量k的属性为“整数”。

行2,由于k是整数,8+16就不再是字符串,而是一个算式,因此,bash会对它进行运算,最后把结果24赋值个k。

必须注意的是:

  • 算式中,运算符和操作数之间不可以有空格符,要紧密连接。
  • 特殊符号不必使用 转义。例如:乘法*,乘法**。
  • 算式中,可包含其他变量,变量之前不必加上$。

使用 declare -i 设定变量之后,加减乘除等运算,就非常直观了:

declare -i k

k=8+16
k=16-8
k=5*3
k=22/5
k=2**3
k=100%43

declare -i j
j=k+1  #或 j=$k+1
echo $j

行3~8,分别是加、减、乘、除、乘方、求余数等运算。

行10,设定变量j也是整数。

行11,算式中可以包含变量,但不必加上‘$’;k的变量值代入其中,加1后,赋值给变量j。

 

第五节:使用内置命令 let 做算术运算

 

let 的用法也很简单,其注意事项同 declare。

以下是let的范例:

let k=8+16
let k=16-8
let k=5*3
let k=22/5
let k=2**3
let k=100%43
let j=k+1

其意自明,这里就不再赘述了。

 

另外,可以使用“空格符”让表达式可读性高一些,但这时,必须使用“引号”含括表达式才行,比如:

let "k = k + 5"
 

 来源:http://blog.snsgou.com/post-710.html

分享到:
评论

相关推荐

    shell 入门 shell 入门

    - `expr`:执行算术运算。 - **流程控制**:Shell支持条件语句(如`if`、`else`、`elif`)、循环语句(如`for`、`while`)以及跳转命令(如`break`、`continue`),这些结构允许你根据条件执行不同命令或重复执行...

    shell脚本入门教程

    ### Shell脚本入门教程知识点详解 #### 一、Shell编程的重要性与应用场景 - **灵活性与自动化**:在Linux系统中,尽管存在丰富的图形界面工具,但Shell作为一种强大的命令行工具和编程语言,仍然具备无可替代的...

    Linux Shell从入门到精通学习笔记

    本文档《Linux Shell从入门到精通》是作者李振良基于个人经验整理的一份全面教程,旨在帮助读者从零基础开始熟悉Linux系统常用命令,掌握Shell脚本语言,并能够独立编写脚本,提升运维效率。 ### Shell基础知识 1. ...

    shell入门学习笔记

    4.1 算术运算:`=`, `+=`, `-=`等,需用`let`进行计算。 4.2 位运算符:与C语言类似。 4.3 逻辑运算符:`&&`, `||`, `, `&gt;`, `==`, `!=`。 4.4 优先级:遵循数学中的运算符优先级。 4.5 表达式求值:`$[]`和`$()`...

    shell教程(一个很不错的bash脚本编写教程)

    - `expr`: 进行算术运算。 - `find`: 搜索文件系统中的文件。 - `tee`: 将标准输出写入文件并显示在屏幕上。 - `basename`和`dirname`: 提取文件名或目录名。 - `head`和`tail`: 显示文件的头部或尾部内容。 -...

    TCSH shell 编程入门 (PDF)

    ### TCSH Shell 编程入门关键知识点解析 #### 一、TCSH Shell 概述 TCSH(TC Shell)是一种Unix shell,由贝尔实验室的开发人员基于早期的C shell (csh) 进行改进而成。TCSH在控制结构上更加接近于高级程序设计...

    linux shell 编程入门

    ### Linux Shell 编程入门知识点概述 #### 一、Shell 的定义与作用 Shell 是一种命令解释器,它充当用户与 Linux 操作系统之间的接口。Shell 的主要职责是接收用户的命令,并将这些命令传递给操作系统内核(kernel)...

    shell脚本教程.docx

    - **expr**: 进行算术运算。 - **find**: 搜索文件。 - **tee**: 将输入的内容输出到标准输出同时写入文件。 - **basename**: 获取文件名(不含路径)。 - **dirname**: 获取文件路径。 - **head**: 查看文件头部...

    shell编程入门.pdf

    Shell支持基本的算术运算,格式为`expr m + n`或`$((m+n))`。例如: ```bash result=$((2+3)) ``` ### 4. 流程控制 #### 4.1 for循环 - **基本语法**: ```bash for variable in list; do command(s) done ...

    大家一起学习shell的入门资料

    - **expr**:执行算术运算。 - **find**:在文件系统中查找文件。 - **sed**:流编辑器,用于文本转换和过滤。 - **awk**:强大的文本分析和报告工具。 #### 高级shell编程技巧 - **管道(Pipe)**:通过`|`符号将...

    Shell 编程入门 整理版

    **Shell编程入门整理版** Shell编程是Linux/Unix操作系统中的一种脚本语言,它使得用户可以通过命令行界面执行一系列操作,实现自动化任务。Bash(Bourne-Again SHell)是最常用的Shell类型,它是GNU项目的一部分,...

    shell必学必会命令

    - **计算表达式**:进行算术运算,如`let "sum = $a + $b"`。 ##### 3.2 Linux 常见符号 - **重定向符号**:用于改变命令的标准输入或输出,如`&gt;`、`&gt;&gt;`、`。 - **管道符**:将一个命令的输出作为另一个命令的输入...

    精通linux_shell编程教程pdf完整版

    还介绍了$RANDOM变量用于生成随机数,双圆括号结构用于算术运算。循环和分支的高级话题包括循环控制和测试与分支的结构。书中还讨论了内部命令与内建命令、外部过滤器、程序和命令,包括基本命令、时间/日期命令、...

    linux shell编程基础教程

    - `expr`: 执行算术运算。 - `find`: 查找文件。 - `tee`: 将数据输出到标准输出和文件。 - `basename`: 返回文件名(不含路径)。 - `dirname`: 返回文件所在的目录。 - `head`: 显示文件的前几行。 - `tail...

    高级shell编程.pdf

    - **算术与逻辑操作**:了解Shell中的基本算术运算和逻辑运算,包括双括号构造`(( ))`的使用,以及操作符优先级的概念。 #### 2. 高级主题 - **内部变量**:深入探讨Shell内置的变量,了解它们如何影响脚本的行为...

Global site tag (gtag.js) - Google Analytics