200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【shell】数值加减乘除|字符串转换成数字|提取数字字母小数

【shell】数值加减乘除|字符串转换成数字|提取数字字母小数

时间:2024-02-15 20:31:58

相关推荐

【shell】数值加减乘除|字符串转换成数字|提取数字字母小数

目录

数值计算

用shell脚本 计算两个数的加减乘除取余

变量计算

字符数值转换

从字符串中提取数字|字母|小数

字符截取方法

数值计算

用shell脚本 计算两个数的加减乘除取余

shell 包含三个命令:bc、expr、let可用于数值计算。

输入:整数,let和expr都无法进行浮点运算,但是bc和awk可以。

输出:bc、expr可直接显示计算结果;let则丢弃计算结果,可通过传递结果到变量,取变量值获得计算结果。

格式示例:

bc

[root@localhost ~]# echo 300 + 5 |bc

305

[root@localhost ~]# echo 300 - 5 |bc

295

[root@localhost ~]# echo 300 /* 5 |bc

1500

[root@localhost ~]# echo 300 / 5 |bc

60

--------------------------------------------------------

expr

[root@localhost ~]# expr 300 + 5

305

[root@localhost ~]# expr 300 - 5

295

[root@localhost ~]# expr 300 /* 5

1500

[root@localhost ~]# expr 300 / 5

60

------------------------------------------------------

let

[root@localhost ~]# let i=300+5

[root@localhost ~]# echo $i

305

[root@localhost ~]# let i=300-5

[root@localhost ~]# echo $i

295

[root@localhost ~]# let i=300/*5

[root@localhost ~]# echo $i

1500

[root@localhost ~]# let i=300/5

[root@localhost ~]# echo $i

60

-----------------------------------------------------

经测试,bc允许运算量和运算符之间无空格,let 不允许有空格,expr运算量和运算符之间必须有空格。

[root@localhost ~]# let i = 5 + 3

-bash: let: =: syntax error: operand expected (error token is "=")

[root@localhost ~]# echo 300+5 |bc

305

[root@localhost ~]# expr 300+5

300+5

参考:

let的使用 /u/3374/showart_225918.html

expr字符处理 http://bkeep./blog/static/12341429054111712718/

expr乘法运算符 /lgh_2002/blog/static/4401752611804630930/

shell数值运算多种方法 http://jidiblog./140821/282481

————————————————

原文链接:/praylucky/article/details/6252963

变量计算

$(($start_index-1))

$(($myarg - $myarg2))

字符数值转换

shell去除字符串前所有的0

[root@localhost sh]# str=00007985566465

[root@localhost sh]# str_new=$(echo -e $str | sed -r 's/0*([0-9])/\1/')

[root@localhost sh]# echo $str_new

7985566465

字符串转数值

a=“08”

b=echo $a|awk '{print int($0)}'

echo $b

输出:8

从字符串中提取数字|字母|小数

1 #/bin/bash2 #正则表达式写在[]里,^代表非3 echo " 0ab12 AB34 Cc " | sed 's/[^0-9]//g'4 #输出 012345 echo " 0ab12 AB34 Cc " | sed 's/[^a-z]//g'6 #输出 abc7 echo " 0ab12 AB34 Cc " | sed 's/[^a-zA-Z]//g'8 #输出 abABCc9 echo " 0ab12 AB34 Cc " | sed 's/[0-9]//g'10 #输出 ” ab AB Cc “,输出内容包含空格

echo "7月21日" | tr -cd "[0-9]"

这样就可以提取出721

释义tr -cd "[0-9]"

tr是translate的缩写,主要用于删除文件中的控制字符,或者进行字符转换

-d表示删除,[0-9]表示所有数字,-c表示对条件取反

tr -cd "[0-9]" 的即:剔除非数字的字符,即输出 1212

提取数字

echo "lcx-9.89_66AB-7777.0_88.txt"|grep -Po "\d+\.\d+"

9.89

7777.0

grep命令提取小数:

1 #/bin/bash2 #转化为提取小数点两侧的整数3 echo " *3.2-& " | grep -oP '\d*\.\d+'4 #输出 3.2

(参考:/liangxuran/p/14578866.html)

字符截取方法

原文:/article/56563.htm

/cangqinglang/p/11952838.html

解决类型

假设有变量 var=/123.htm.

1. # 号截取,删除左边字符,保留右边字符。

1

echo ${var#*//}

其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符

即删除 http://

结果是 :/123.htm

2. ## 号截取,删除左边字符,保留右边字符。

1

echo ${var##*/}

##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符

即删除 /

结果是 123.htm

3. %号截取,删除右边字符,保留左边字符

1

echo ${var%/*}

%/* 表示从右边开始,删除第一个 / 号及右边的字符

结果是:

4. %% 号截取,删除右边字符,保留左边字符

1

echo ${var%%/*}

%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符

结果是:http:

5. 从左边第几个字符开始,及字符的个数

1

echo ${var:0:5}

其中的 0 表示左边第一个字符开始,5 表示字符的总个数。

结果是:http:

6. 从左边第几个字符开始,一直到结束。

1

echo ${var:7}

其中的 7 表示左边第8个字符开始,一直到结束。

结果是 :/123.htm

7. 从右边第几个字符开始,及字符的个数

1

echo ${var:0-7:3}

其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。

结果是:123

8. 从右边第几个字符开始,一直到结束。

1

echo ${var:0-7}

表示从右边第七个字符开始,一直到结束。

结果是:123.htm

注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

汇总

最后,我们对以上 8 种格式做一个汇总,请看下表:

格式 说明

${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。

${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。

${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。

${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。

${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

${string%chars*} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

${string%%chars*} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

原文链接:/bandaoyu/article/details/113770557

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。