算术运算

默认不支持算数运算。所以需要特定的语法来完成,

shell进行算数运算的工具:

  1. let
  2. declare
  3. (())或$(())或$[]
  4. bc

let:

格式: let var=算术表达式

例如:let num=1+20;echo $num

declare:

例如: declare -i var = 数值

declare -i num=1+5; echo $num

(())或$()或$[]

格式:

  • ((var=算术表达式))
  • var=$[算术表达式]
  • var=$((算术表达式))
  • var=$(expr arg1 arg2 arg3 ...)

范例:

((num=999+1));echo $num

echo num=$((999-1))

echo num=$[1+10]

bc:

格式:echo '算术表达式' | bc

例如:echo 999+999 | bc

生成随机数:$RANDOM   取值范围:0-32767

范例:生成0-49之间随机数: echo $[$RANDOM%50]

取余范围: # x % n 取余范围是 0 ~ n-1

例如:对100进行取模得到的值范围在0-99之间。

逻辑运算:与或非、异或

真:$? 为0    或者 二进制1

假:$? 不为0   或者 二进制0

  • 与:&
  • 或:|
  • 非:!
  • 异或:^(脱字符) -- 相同为假,不同为真

短路运算

  • 短路与 &&:前面为真才会执行后面的
  • 短路或 ||:前面为真后面的就不执行了

条件测试命令:

  • 格式一:test EXPRESSION
  • 格式二:[ EXPRESSION ]
  • 格式三:[[ EXPRESSION ]] --- 支持正则表达式和通配符

    注意:EXPRESSION前后必须有空白字符

    test和中括号等价

test功能:

测试文件的状态、类型、权限

文件权限判断选项:

-r:是否存在读权限

-x:是否存在执行权限

-w:是否存在写权限

文件类型判断:

-f:是否为文本文件

-d:是否为目录文件

文件状态判断:

-e:文件是否存在

-a:文件是否存在

字符串判断:

-z:字符串是否为空

= != > <:连个字符串是否相同、不同等。(这些符号两边要有空格)

使用[[]]的时候:

== 和 !=:使用'=='或'!='的时候,会把右侧的认为是通配符

=~:如果使用的是' =~',会把右侧的认为是正则表达式

双括号采用 == =~

数字之间的比较方法;

-eq: equal,相等

-ne: not-equal,不等

-gt: greater-than,大于

-lt:less-than,小于

关于 () 和 {}

作用:将多个命令组合在一起,批量执行

格式:( 空格 CMD1;CMD2;...)和 {空格 CMD1;CMD2;...; }(括号左边要有空格)

使用小括号(),里面执行的命令会开启子进程,大括号不会。

组合条件测试:

把两个条件用并且、或者的关系联系起来

并且: -a表示并且 --- EXPR1 -a EXPR2

例如:如果当前用户非root且该文件不存在就创建这个文件

[ $(whoami) != 'root' -a ! -e /data/dir ] && sudo mkdir /data/dir

或者: -o表示或者 --- EXPR1 -o EXPR2

read:用来接受键盘输入

read读取到键盘的输入以后,会把值分配给指定的一个变量。如果没有指定变量,就把值赋值给内置的变量REPLY。

选项:

-p   指定提示信息

Linux shell脚本算术运算和逻辑运算的更多相关文章

  1. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  2. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  3. 阿里Linux Shell脚本面试25个经典问答

    转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...

  4. Linux Shell脚本教程

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  5. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  6. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  7. Linux Shell 脚本入门

    linux shell 脚本格式 #!/bin/sh#..... (注释)命令...命令... 使用vi 创建完成之后需设置权限 chmod +x filename.sh 执行命令: ./filena ...

  8. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  9. Linux Shell脚本攻略 读书笔记

    Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...

随机推荐

  1. 新手入门C语言第九章:C函数

    C 函数 函数是一组一起执行一个任务的语句.每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数.您可以把代码划分到不同的函数中.如何划分代码到不同的函数中 ...

  2. php第一次实验个人博客网站的设计编写①

    先上效果图: 网页代码:index.html <!DOCTYPE html> <html lang="en"> <head>     <m ...

  3. 2022.02.20 SA

    2022.02.20 SA 如果我还能看见明天黎明,如果我还能再爬起来,我仍会走我的路,哪怕这条路已经荒废许久,也许我们无法拥有感情,我们甚至无法像个正常人一样接受太阳的洗礼,但是我依然会执行我的条约 ...

  4. 2021.11.04 P1392 取数(多路归并)

    2021.11.04 P1392 取数(多路归并) P1392 取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 在一个n行m列的数阵中,你须在每一行取一个数(共n个数) ...

  5. 2021.08.09 P6037 Ryoku的探索(基环树)

    2021.08.09 P6037 Ryoku的探索(基环树) P6037 Ryoku 的探索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的性质 2.基环树的性质 ...

  6. 让视障者的网络之路少一些障碍——微软为 Edge 浏览器开发自动图像描述功能并呼吁网页作者补充图片的替换说明

    网页是互联网的组成部分,浏览器是开启互联网大门的钥匙.对于生活在信息时代下的我们而言,每一个人都很难离开网络而生活,其中也包括盲人这一残障群体. 本文的引子是如下一条新闻: IT之家3月18日消息,微 ...

  7. Vite2+Vue3+ts的eslint设置踩坑

    目录 新项目了 Vite搭建 eslint 先安装eslint 创建.eslintrc.js 引入规则 Airbnb 配合prettier 对ts的支持 .eslintrc.js 在页面上查看esli ...

  8. Vue 学习之路(一)- 创建脚手架并创建项目

    安装脚手架 命令 npm install -g @vue/cli 打开 cmd 窗口输入以上命令.当出现以下界面即表示安装完成. 查看已安装脚手架版本 命令 vue -V 在 cmd 窗口输入以上命令 ...

  9. ONNX Runtime 源码阅读:Graph::SetGraphInputsOutputs() 函数

    目录 前言 正文 总结 前言 为了深入理解ONNX Runtime的底层机制,本文将对 Graph::SetGraphInputsOutputs() 的代码逐行分析. 正文 首先判断Graph是否从O ...

  10. 关键字 global和nonlocal

    globale 表示从全局把一个变量(比如a)引入局部,后面的变量全是此变量a 使用   globale 变量名 # 全局变量一般是不能随意的修改的 # a = 10 # def func(): # ...