ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

shell-变量的数值运算与特殊应用expr

2020-04-24 10:10:17  阅读:346  来源: 互联网

标签:shell 运算 expr chars pub echo 241 root


1. expr(evaluate expressions)命令的用法:
  expr命令一般用于整数值,当也可用于字符串,用来求表达式变量的值,同时expr也是一个手工命令行计算器。
  语法:expr expression

[yanwei@yanwei-04 logs]$ expr 2 + 2
4
[yanwei@yanwei-04 logs]$ expr 2 - 2
0
[root@1-241 ~]# expr 2 * 2      
expr: 语法错误
[root@1-241 ~]# expr 2 \* 2
4
[root@1-241 ~]# expr 2 + 2
4
[root@1-241 ~]# expr 2+2
2+2
[root@1-241 ~]# expr 2 / 2
1
[root@1-241 ~]# expr 2 \*\* 2
expr: 语法错误
[root@1-241 ~]# expr 2 % 2
0

  提示:
    1) 注意运算符左右都有空格
    2) 使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解星号的含义。

2. 增量计数
  expr在循环中可用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法为命令替代,最基本的一种是从expr命令接收输出并将之放入循环变量。
  例:给自变量i加1

[root@1-241 ~]# i=0
[root@1-241 ~]# i=`expr $i + 1`
[root@1-241 ~]# echo $i
1

  expr$[$a+$b]表达式形式,其中$a $b可以为整数值

[root@1-241 ~]# expr $[2+3]
5
[root@1-241 ~]# expr $[2*3]
6
[root@1-241 ~]# expr $[2**3]
8
[root@1-241 ~]# expr $[2/3]
0
[root@1-241 ~]# expr $[2%3]
2
[root@1-241 ~]# a=5
[root@1-241 ~]# b=6
[root@1-241 ~]# expr $[$a+$b]
11
expr 将其后的串解释为表达式并计算其值,运算符前后需有空格

  其他特殊用法:

expr 用法ssh-copy-id脚本
	if expr "$1":".*\.pub"  ; then
		#expr id_dsa.pub : '.*\.pub',匹配*.pub格式的文件如果是则为真。例:
		#[oldboy@oldboy .ssh]$ expr "id_dsa.pub" : ".*\.pub"
		#10  这里是匹配后字符数
		#man expr
		#string :regexp
		anchored pattern match of regexp in string
[root@1-241 ~]# expr "test.pub" : ".*\.pub" && echo 1 ||echo 0
8
1
[root@1-241 ~]# expr "test.x" : ".*\.pub" && echo 1 ||echo 0
0
0

  通过expr判断变量是否为整数 

[root@1-241 scripts]# cat judge_int.sh 
read -p "pls input:"a
expr $a + 0 &>/dev/null
[ $? -eq 0 ] && echo int||echo chars
执行完
[root@1-241 scripts]# sh judge_int.sh 
pls input:a
chars

加强版:持续等待输入连续判断,整数就退出,错误继续判断输入
[root@1-241 scripts]# cat judge_int.sh 
while true
do
read -p "pls input:" a
	expr $a + 0 &>/dev/null
		if [ $? -eq 0 ] 
			then
			 echo int
			 exit 1
		else 
			echo chars
		fi
done
执行结果: [root@1-241 scripts]# sh judge_int.sh pls input:a chars pls input:r chars pls input:12 int

  通过expr计算字符串的长度

[root@1-241 scripts]# chars=`seq -s" " 100`
[root@1-241 scripts]# echo ${#chars}
291
[root@1-241 scripts]# echo $(expr length "$chars")
291

  

 

标签:shell,运算,expr,chars,pub,echo,241,root
来源: https://www.cnblogs.com/scajy/p/12765521.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有