【Shell 编程指南】shell运算操作符之(())

简介: 【Shell 编程指南】shell运算操作符之(())

Shell (( )) 的用法与深入解析

1. 基础用法

Shell (( )) 的用法双小括号 (( )) 的语法格式为:

((表达式))

通俗地讲,就是将数学运算表达式放在(())之间。

运算操作符/运算命令 说明
((a=10+66)**((b=a-15))
((c=a+b))**
**这种写法可以在计算完成后给变量赋值。以 ((b=a-15)) 为例,即将 a-15 的运算结果赋值给变量 c。
注意,使用变量时不用加$前缀,(( )) 会自动解析变量名。**
**a=$((10+66)****b=$((a-15))
c=$((a+b))**
*可以在 (( )) 前面加上***$符号获取 (( )) 命令的执行结果,也即获取整个表达式的值。以 c=$((a+b)) 为例,即将 a+b 这个表达式的运算结果赋值给变量 c。注意,类似 c=((a+b)) 这样的写法是错误的,不加$**就不能取得表达式的结果。
((a>7 && b==c)) (( )) 也可以进行逻辑运算,在 if 语句中常会使用逻辑运算。
echo $((a+10)) *需要立即输出表达式的运算结果时,可以在 (( )) 前面加***$**符号。
((a=3+5, b=a+10)) 对多个表达式同时进行计算。

2. 运算符优先级

在 (( )) 中,运算符的优先级与大多数编程语言相似。例如,乘法和除法优先于加法和减法。

#!/bin/bash
((result = 2 + 3 * 4))  # 先进行乘法运算,然后加法
echo "result=$result"  # 输出 result=14

3. 位运算与逻辑运算

除了基础的数学运算,(( )) 还支持位运算和逻辑运算。

#!/bin/bash
((result = (5 & 3) | (4 >> 1)))  # 位运算
echo "result=$result"  # 输出 result=1
((result = !(5 < 3)))  # 逻辑非运算
echo "result=$result"  # 输出 result=1

4. 自增与自减

(( )) 中还支持自增(++)和自减(–)运算符。

#!/bin/bash
((a = 5))
((a++))
echo "a=$a"  # 输出 a=6

5. 条件判断与循环

(( )) 常用于 ifwhile 语句中进行条件判断和循环。

#!/bin/bash
a=0
while ((a < 5)); do
  echo "a=$a"
  ((a++))
done

这里,我们使用了 while ((a < 5)) 来进行循环条件的判断,这样的写法更加直观和简洁。


在 (( )) 中使用变量无需加上$前缀,(( )) 会自动解析变量名,这使得代码更加简洁,也符合程序员的书写习惯。

#!/bin/bash
((a=2+8*2))
echo "a=$a"
b=$((7+2**4-4%3)) #运算后将结果赋值给变量,变量放在了括号的外面。
echo "b=$b"
echo $((1+2**3-4%3)) #也可以直接将表达式的结果输出,注意不要丢掉 $ 符号。
c=$((100*(100+1)/2)) #利用公式计算1+2+3+...+100的和。
echo "c=$c"
echo $((3<8))  #3<8 的结果是成立的,因此,输出了 1,1 表示真
if ((8>7&&7==5)) #进行逻辑判断
then
 echo yes
else
 echo no
fi

6. 深度见解

在编程中,我们经常需要进行数学运算和逻辑判断。(( )) 的出现,不仅简化了代码,也让我们能更专注于解决问题本身,而非纠结于语法细节。这种简化反映了人们对工具使用的本能需求,即工具应当是解决问题的“延伸”,而不是问题本身。

正如 Bjarne Stroustrup 在《The C++ Programming Language》中所说:“我们不能让程序员整天都在做与问题无关的工作。”

7. 源码实现

在 Linux 源码中,这些 Shell 命令和运算符是通过一系列底层的系统调用来实现的。具体来说,你可以在 Bash 的源码中找到这些实现,例如在 arith.c 文件中。

结语:编程、思考与持续成长

在编程的世界里,每一行代码都是一种表达,每一个问题都是一个挑战。正如我们在本文中探讨的 Bash 脚本,简单的代码背后往往蕴含着丰富的思考和解决问题的智慧。编程不仅是一种技术活动,更是一种思维的锻炼和人类创造力的体现。

正如Bjarne Stroustrup在《The C++ Programming Language》中所说:“编程是理解的艺术。”

从编程的角度看,每一个错误、每一个挑战都是一次成长的机会。这些“错误”实际上是我们与计算机、与问题、甚至与自己内心的一次深度对话。它们不仅仅是困扰,更是一种启示,引导我们去优化思维,去完善解决方案。

我诚挚地邀请大家加入这场关于编程和思考的旅程。无论你是编程的新手,还是经验丰富的开发者,都请不吝赐教,分享你的见解和经验。你的每一次互动,无论是点赞、评论、分享还是关注,都是对我持续创作和分享的最大鼓励和支持。

感谢你花时间阅读这篇文章,如果你觉得有价值,请不要忘记收藏和分享。也欢迎你对博客内容提出宝贵的建议和问题,因为每一个问题都可能是下一篇文章的起点。

让我们一起,在编程的道路上,持续学习,持续成长。

“代码如诗,智慧如光。” —— 未知

感谢阅读,期待与你再次相遇在编程和思考的交汇点。

目录
相关文章
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
13天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
Shell
Shell编程(下)
Shell编程(下)
86 1
|
1月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
38 1
|
1月前
|
Shell Linux 开发工具
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
62 12
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
26天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
68 1
|
12天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
35 2
6种方法打造出色的Shell脚本
|
3天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
13 2