[Linux][Shell][Shell数学运算]详细讲解

目录

  • 0.前置知识
    • 1.if参数
    • 2.Unix Shell里面比较字符写法
  • 1.算数运算符号
  • 2.常见算数运算命令
    • 0.常用算数运算命令
    • 1.双括号(())
    • 2.let命令
    • 3.expr命令
    • 4.bc命令
    • 5.中括号[]
    • 6.awk计算


0.前置知识

1.if参数

参数意义
-bfile存在并且是块⽂件时返回true
-cfile存在并且是字符⽂件时返回true
-dpathname存在并且是⼀个⽬录时返回true
-epathname指定的⽂件或⽬录存在时返回true
-ffile存在并且是⽂件时返回true
-g当由pathname指定的⽂件或⽬录存在并且设置了SGID时返回为true
-hfile存在并且是符号链接⽂件时返回true,该选项在⼀些⽼系统上⽆效
-k当由pathname指定的⽂件或⽬录存在并且设置了“粘滞”位时返回true
-pfile存在并且是命令管道时返回为true
-r当由pathname指定的⽂件或⽬录存在并且可读时返回为true
-sfile存在⽂件⼤⼩⼤于0时返回true
-u当由pathname指定的⽂件或⽬录存在并且设置了SUID时返回true
-w当由pathname指定的⽂件或⽬录存在并且可执⾏时返回true
-o当由pathname指定的⽂件或⽬录存在并且被⼦当前进程的有效⽤户ID所指定的⽤户拥有时返回true

2.Unix Shell里面比较字符写法

参数意义
-eq等于
-ne不等于
-gt大于
-lt小于
-ge大于等于
-le小于等于
-z空串
=两个字符相等
!=两个字符不等
-n非空串

1.算数运算符号

  • Shell常见的算术运算符号:参见C算术运算符
    • 多了一个**:幂运算

2.常见算数运算命令

0.常用算数运算命令

运算操作符与运算命令意义
(())用于整数运算,效率很高
let用于整数运算,类似(())
expr可用于整数运算,但还有很多其他额外功能
bcLinux下的一个计算机程序(适合整数及小数运算)
$[]用于整数运算
awk即可以用于整数运算,也可以用于小数运算
declare定义变量值和属性,-i参数可以用于定义整型变量,做运算

1.双括号(())

  • 效率极高

  • 注意:必须是整数,(())不支持浮点数,浮点数需要其他命令计算

    运算操作符与运算命令意义
    ((i=i+1))运算后赋值,不能用echo ((i=i+1))的形式输出表达式的值,要用echo $((i=i+1))输出
    i=$((i+1))(())前加$,表示将表达式运算后赋值给i
    ((8>7&&5==5))进行比较操作,还可以加入逻辑与和逻辑或,用于条件判断
    echo $((2+1))需要直接输出运算表达式的运算结果时,在(())前加$
  • 简易Shell脚本示例:一个交互的计算器

    #!/bin/bash
    Usage()
    {printf "Error! Please enter an integer\n"exit 1
    }# 接收用户输入的命令,-p参数后面写给用户看到的提示信息
    read -p "Please input your number> " first# 进行对用户输入判断 --> if语句
    # 限制用户必须输入纯数字
    # []里面前后必须有一个空格,是固定语法
    # -n,如果字符串为空,则条件不成立,如果不为空,则条件成立
    # sed的作用是把字符串进行替换,把所有的数字都替换为空,那么就剩下其他的非数组内容了
    if [ -n "`echo $first | sed 's/[0-9]//g'`" ]thenUsage
    firead -p "Please input your operator> " operator
    if [ "$operator" != "+" ] && [ "$operator" != "-" ] && [ $operator != "*" ] && [ $operator != "/" ]thenecho "只允许输入+-*/"exit 2
    firead -p "Please input your number> " second
    if [ -n "`echo $second | sed 's/[0-9]//g'`" ]thenUsage
    fiecho $(($first $operator $second))
    

2.let命令

  • let命令等同于(())
    • 但是(())效率更高
  • 简易脚本示例:检测网页状态
    #!/bin/bashCheckUrl()
    {timeout=0fails=0success=0while truedowget --timeout=$timeout --tries=1 snowk.x3322.net:9098 -q -O /dev/null# 如果状态码!=0,就报错if [ $? -ne 0 ]thenlet fails+=1elselet success+=1fiif [ $success -ge 1 ]thenecho "It's success :P"exit 0fi# 如果出错次数大于2,就告警if [ $fails -ge 2 ]thenecho "It's dead :("exit 2fidone
    }CheckUrl
    

3.expr命令

  • expr命令允许在命令行处理数学表达式,简单的计算器命令
    • 具体用法expr --help
  • expr命令并不是很好用,因为其基于空格传入参数
    • 很多符号在shell⾥有特殊含义,因此必须得转义使用
  • 示例
    expr 5 + 3
    expr 5 \* 6
    
  • expr模式匹配
    • : --> 计算字符串中的字符个数
    • .* --> 任意字符串重复0次或多次
      • 此处可以自定义想匹配的内容
    • 语法expr 字符串 ":" ".*"
    • 示例expr SnowK.jpg ":" ".*\.jpg"
  • 简单脚本示例
    • expr判断文件名是否符合要求
      #!/bin/bashif expr $1 ":" ".*\.jpg" &> /dev/null
      thenecho "This is a jpg file"
      elseecho "It's not a jpg file"
      fi
      
    • 找出字符长度不大于6的单词
      #!/bin/bashfor str in I am SnowK, this is a example
      doif [ `expr length $str` -le 4 ]thenecho $strfi
      done
      

4.bc命令

  • bc命令可以当作命令行计算器
  • 直接bc可以进入交互式操作
  • bc配合管道符计算:计算1~10的和
    echo {1..10} | tr " " "+" | bc
    

5.中括号[]

  • 语法$[表达式]

6.awk计算

echo "4 8" | awk '{print $1+4*$2}'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

形态学图像处理

1 工具 1.1 灰度腐蚀和膨胀 当平坦结构元b的原点是(x,y)时,它在(x,y)处对图像f的灰度腐蚀定义为,图像f与b重合区域中的最小值。结构元b在位置(x,y)处对图像f的腐蚀写为: 类似地,当b的反射的原点是(x,y)时,平坦结构元…

react学习——24redux实现求和案例(精简版)

1、目录结构 2、count/index.js import React, {Component} from "react"; //引入store,用于获取数据 import store from ../../redux/store export default class Count extends Component {state {count:store.getState()}componentDidMount() {//监测redux中的…

从像素角度出发使用OpenCV检测图像是否为彩色

从像素角度出发使用OpenCV检测图像是否为彩色 使用OpenCV检测图像是否为彩色(从像素角度出发)引言基本概念从像素角度检测图像是否为彩色代码实现1. 读取图像2. 获取图像的形状3. 遍历图像的每个像素4. 基于RGB通道的判断测试代码 5.优化代码性能6.使用N…

传言称 iPhone 16 Pro 将支持 40W 快速充电和 20W MagSafe

目前,iPhone 15 和 iPhone 15 Pro 机型使用合适的 USB-C 电源适配器可实现高达 27W 的峰值充电速度,而 Apple 和授权第三方的官方 MagSafe 充电器可以高达 15W 的功率为 iPhone 15 机型进行无线充电。所有四款 iPhone 15 机型均可使用 20W 或更高功率的电…

PHP计件工资系统小程序源码

解锁高效管理新姿势!全面了解计件工资系统 🔥 开篇:为什么计件工资系统成为企业新宠? 在这个效率至上的时代,企业如何精准激励员工,提升生产力成为了一大挑战。计件工资系统应运而生,它以其公…

golang interface指针实现

在 Go 语言中,接口(interface)是一种类型,它定义了一组方法的集合。任何实现了接口中所有方法的类型都会自动满足该接口。当涉及到指针接收者时,情况会稍微复杂一些,因为需要考虑到值接收者和指针接收者之间的区别。 下面是一个简…

【小沐学Python】在线web数据可视化Python库:Bokeh

文章目录 1、简介2、安装3、测试3.1 创建折线图3.2 添加和自定义渲染器3.3 添加图例、文本和批注3.4 自定义您的绘图3.5 矢量化字形属性3.6 合并绘图3.7 显示和导出3.8 提供和筛选数据3.9 使用小部件3.10 嵌入Bokeh图表到Flask应用程序 结语 1、简介 https://bokeh.org/ https…

算法力扣刷题记录 四十【226.翻转二叉树】

前言 继续二叉树其余操作: 记录 四十【226.翻转二叉树】 一、题目阅读 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例…

包管理器-npm、yarn、cnpm、pnpm的比较

1. npm (node package manage) 1.1本地安装 使用命令:npm install 包名 或 npm i 包名 本地安装的包出现在当前目录下的node_module目录中 如果本地安装的包带有CLI,npm 会将它的CLI脚本放置到node_modules/.bin下,使用npx命令即可调用。 …

Perl伪哈希探秘:深入理解Perl中的高级数据结构

🌐 Perl伪哈希探秘:深入理解Perl中的高级数据结构 在Perl的世界里,数据结构是编程的基础。除了传统的数组和哈希,Perl还提供了一种特殊的数据结构——伪哈希(Pseudo-Hashes)。伪哈希是一种灵活的键值对集合…

Pandas 进阶 —— 数据转换、聚合与可视化

引言 在数据分析的旅程中,Pandas 库提供了从数据转换到聚合再到可视化的全面解决方案。上篇我们掌握了数据的导入和清洗,本篇我们将探索如何通过 Pandas 对数据进行更高级的处理,包括数据转换、聚合分析以及可视化展示。 数据转换 数据转换…

CAS介绍

CAS是计算机科学中的一个概念,全称是Compare-And-Swap(比较并交换),它是一种原子操作,用于多线程环境下的同步机制。在Java中,你可以使用java.util.concurrent.atomic包下的类,如AtomicInteger来…

绝对值不等式运用(C++)

货仓选址 用数学公式表达题意,假设有位置a1~an,假设选址在x位置处,则有: 如何让这个最小,我们把两个式子整合一下,利用绝对值不等式: 我们知道: 如下图所示:到A,B两点&…

用python生成词频云图(python实例二十一)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.词频云图 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…

云端美味:iCloud中食谱与餐饮计划的智能存储方案

云端美味:iCloud中食谱与餐饮计划的智能存储方案 在数字化生活管理中,我们的食谱和餐饮计划是日常饮食健康与乐趣的重要部分。iCloud提供了一个无缝的解决方案,让我们可以在所有设备上存储、同步和访问这些珍贵的信息。本文将详细介绍如何在…

[ICS] Inferno(地狱) ETH/IP未授权访问,远程控制工控设备利用工具

项目地址:https://github.com/MartinxMax/Inferno Inferno $ ./Install.sh $ python Inferno.py -h 模拟服务端 $ sudo python3 -m pip install --upgrade cpppo $ $ python -m cpppo.server.enip SCADAINT[1000] ADMININT[2] -v 创建一个EtherNet/IP设备 扫描设备 $ pyth…

QT--SQLite

配置类相关的表,所以我使用sqlite,且QT自带该组件; 1.安装 sqlite-tools-win-x64-3460000、SQLiteExpert5.4.31.575 使用SQLiteExpert建好数据库.db文件,和对应的表后把db文件放在指定目录 ./db/program.db; 2.选择sql组件 3.新…

YOLOv10改进 | Conv篇 | 全新的SOATA轻量化下采样操作ADown(参数量下降百分之二十,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的YOLOv10的项目,经…

易备, 安全灵活的远程数据备份软件: 云备份、S3 备份、FTP 备份

面对勒索软件无处不在的威胁,企业都在寻求全方位的数据安全解决方案。其中,数据备份是这个方案的终极核心环节,因为勒索袭击的最终目标是数据,是袭击者用以勒索的筹码。 “不要把鸡蛋放在一个筐子里”,这个原则在备份…

【人工智能】-- 反向传播

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉反向传播 🍈定义 🍈反向传播的作用 🍍参数优化 🍍学…