0


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

目录


0.前置知识

1.if参数

参数意义

-b

file

存在并且是块⽂件时返回

true
-c

file

存在并且是字符⽂件时返回

true
-d

pathname

存在并且是⼀个⽬录时返回

true
-e

pathname

指定的⽂件或⽬录存在时返回

true
-f

file

存在并且是⽂件时返回

true
-g

当由

pathname

指定的⽂件或⽬录存在并且**设置了

SGID

位**时返回为

true
-h

file

存在并且是符号链接⽂件时返回

true

,该选项在⼀些⽼系统上⽆效

-k

当由

pathname

指定的⽂件或⽬录存在并且设置了“粘滞”位时返回

true
-p

file

存在并且是命令管道时返回为

true
-r

当由

pathname

指定的⽂件或⽬录存在并且可读时返回为

true
-s

file

存在⽂件⼤⼩⼤于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

可用于整数运算,但还有很多其他额外功能

bc

Linux下的一个计算机程序(适合整数及小数运算)

$[]

用于整数运算

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

2.let命令

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

3.expr命令

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

4.bc命令

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

5.中括号[]

  • 语法$[表达式]

6.awk计算

echo"4 8"|awk'{print $1+4*$2}'
标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/qq_37281656/article/details/140320224
版权归原作者 DieSnowK 所有, 如有侵权,请联系我们删除。

“[Linux][Shell][Shell数学运算]详细讲解”的评论:

还没有评论