shell-变量的数值运算与特殊应用expr
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的更多相关文章
- Shell基础(二):Shell中的数值运算、条件测试操作、使用if选择结构
一.Shell中的数值运算 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 使用expr.$[ ].let等整数运算工具:定义变量X=1234,然后计算X与78 ...
- [Shell]Bash变量:数值运算及运算符
------------------------------------------------------------------------------------------------- Sh ...
- shell中的数值运算
By francis_hao Oct 2,2017 本文摘录自bash的man手册. 算数运算相关的形式 形式 含义 ((expression)) expression按照下面描述的算术 ...
- shell脚本基础 数值运算 判断 及if语句
数值运算 整数运算[三种,随便掌握一种即可]expr 数字 运算符 数字 [root@ceshiji ~]# expr 1 + 1(运算符号都是+ - * / 注:*需要\*.%是取余,余数只有0 1 ...
- shell基础:数值运算与运算符
linux的shell中,变量的类型默认都是字符串型. export将aa声明为环境变量.也可用declare声明.其实就是改变了-x属性 $(()) 最常用.
- LinuxShell脚本编程基础2-变量与数值运算、父shell和子shell
1.变量和数值运算 Shell脚本的变量不需要声明的 对变量赋值有两种方式, 直接用“=” 或者用键盘输入值 #!/bin/bash name1="Jack" echo $name ...
- shell之数值运算
Shell中声明变量默认是字符串, 要参与数值运算,可使用下面方式,简单,表示以数值方式.
- Linux shell 变量 数学 运算
Abstract : 1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...
- shell 数值运算
declare数值运算 linux默认变量类型为字符串 declare [+/-] [选项] 变量名 '-' 给变量设定类型属性 '+' 取消变量的类型属性 '-a' 将变量声明为数组型 '-i' 将 ...
随机推荐
- log4j日志文件输出保存
og4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=app.log log4j.appe ...
- C012:颠倒显示两位数
代码: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int original; do{ printf(&q ...
- RabbitMQ安装和运行
RabbitMQ在Windows下安装和运行 1.下载Erlang: http://www.erlang.org/downloads/19.2 2.下载Windows版RabbitMq: http:/ ...
- [极客大挑战 2019]Havefun wp
很少见的很简单的一道题 查看源代码 获得一段被注释的代码 直接?cat=dog即可得flag
- CTF-Bugku-杂项-21-28
2020.09.14 下午奥力给 做题 第二十一题 细心的大象 https://ctf.bugku.com/challenges#细心的大象 这一看就是一只有故事的大象,图片详情中有东西,base64 ...
- CTF-BugKu-杂项-1-20
2020.09.14 今天又是奥力给的一天,我的鼻炎啥时候能好啊--真是难受的一,影响学习和生活今天复习一遍杂项,应该挺快,毕竟这东西难就难在脑洞,做过一遍就全知道了,ok,let's go 做题 第 ...
- js中的选择排序和冒泡排序
var arr = [12,25,8,16,14]; console.log("排序前数组,",arr) //选择排序:第一轮,找出数组中最小的数,将第一项和最小的数互换位置.第二 ...
- k8s滚动更新(六)
实践 滚动更新是一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新.滚动更新的最大的好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性. 下面我们部署三副本应用, ...
- JVM内存结构和Java内存模型
一.JVM 首先看一张JVM结构图(某度找的) 主要看运行时数据区,里边有方法区,堆,java虚拟机栈,本地方法栈,程序计数器.其中方法区和堆是线程共享的,也是JVM进行垃圾收集的区域,java虚拟机 ...
- Golang的Context介绍及其源码分析
简介 在Go服务中,对于每个请求,都会起一个协程去处理.在处理协程中,也会起很多协程去访问资源,比如数据库,比如RPC,这些协程还需要访问请求维度的一些信息比如说请求方的身份,授权信息等等.当一个请求 ...