linux命令行计算器
详细文档请 man bc
在windows下,大家都知道直接运行calc,(c:\windows\system32\calc.exe),可以打开计算器。
注:
calculate vt.&vi.
计算;calculator n. 计算器。calc就是这个计算的简写。
Ca在化学中是代表钙元素,calcium
钙(20号元素,符号Ca)。两者有什么联系呢?
calculate 来自calculus,原义是做算术运算的小石子,是calx(石灰石)的小称。
那么在linux系统下,有无与windows下calc.exe类似的计算器呢?
下面总结linux下的三个命令,来介绍一下linux下的计算方法:
1)bc
bc在默认的情况下是个交互式的指 令。在bc工作环境下,可以使用以下计算符号:
+ 加法
- 减法
* 乘法
/ 除法
^ 指数
% 余数
如:
#
bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3+6
<=加法
9
4+2*3 <=加法、乘法
10
(4+2)*3 <=加法、乘法(优先)
18
4*6/8
<=乘法、除法
3
10^3
<=指数
1000
18%5 <=余数
3+45*25^218/4
<=一行输入多个计算,用相隔。
7
10
25
4
quit <=退出
# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=3
<=设小数位
1/3
.333
quit
以上是交互的计算,那到也可以 不进行交互而直接计算出结果。
A.用echo和|法,如:
# echo "(6+3)*2" |bc
18
# echo 15/4 |bc
3
# echo "scale=215/4"
|bc
3.75
# echo "3+45*25^218/4"
|bc
7
10
25
4
另外,
bc除了scale来设定小数位之外,还有ibase和obase来其它进制的运算。
如:
//将16进制的A7输出为10进制, 注意,英文只能大写
# echo "ibase=16A7"
|bc
167
//将2进制的11111111转成10进制
# echo "ibase=211111111"
|bc
255
//输入为16进制,输出为2进制
# echo "ibase=16obase=2B5-A4"
|bc
10001
对于bc还有补充,在bc --help中还可以发现:bc后可以接文件名。如:
# more calc.txt
3+2
4+5
8*2
10/4
# bc calc.txt
5
9
16
2
2)expr
expr命令可不光能计算加减乘除哦,还有很多表达式,都可以计算出结果,不过有一点需要注意,在计算加减乘除时,不要忘了使用空格和转义。下
面直接用实例来介绍一下expr的运算,如:
# expr 6 +
3
(有空格)
9
# expr 2 \*
3
(有转义符号)
6
# expr 14 % 9
5
# a=3
# expr
$a+5
(无空格)
3+5
# expr $a +
5
(变量,有空格)
8
#
a=`expr 4 + 2`
echo $a
6
# expr $a + 3
9
另外,expr对于字串的 *** 作(计算)也是很方便的,如:
//字串长度
# expr length
"yangzhigang.cublog.cn"
21
//从位置处抓取字串
# expr substr "yangzhigang.cublog.cn"
1 11
yangzhigang
//字串开始处
# expr index
"yangzhigang.cublog.cn" cu
13
3)dc
用dc来进行计算的人可以不多,因为dc与bc相比要复杂,但是在进行简单的计划时,是差不多的,不算难。dc为压栈 *** 作,默认也是交互的,但
也可以用echo和|来配合打算。
如:
# dc
3
2+
p
5
4*
p
20
quit
# echo 3 2+ 4* p |dc
20
4)echo
echo用来进行回显,是周知的事。上面也配合bc来进行计算。其实echo也可以单独进行简单的计算,如:
# echo $((3+5))
8
# echo $(((3+5)*2))
16
echo还可以进行变量的计算,如:
# a=10
# b=5
# echo $(($a+$b))
15
# echo $a+$b
10+5
# echo $a+$b |bc
15
//计算前天的日期
# echo `date
+%Y%m%d`
20090813
# echo `date +%Y%m%d`-2
20090813-2
# echo `date +%Y%m%d`-2
|bc
20090811
5)AWK
awk在处理文件的时,可以进行运算,那当然也可以单单用来计算了,如:
# awk 'BEGIN{a=3+2print
a}'
5
# awk 'BEGIN{a=(3+2)*2print
a}'
10
Awk 支持常见的运算符, 如 + (加),- (减), * (乘), / (除), ^ 或 ** (乘方), % (取模)
等等。 此外, awk 也提供了一些常用的数学函数, 比如 sin(x), cos(x), exp(x), log(x),
sqrt(x), rand()。 使用这些运算符和函数可以直接进行一些简单的运算:
# echo | awk '{print
8+6}'
14
# echo | awk '{print
8/6}'
1.33333
# echo | awk '{print
9%5}'
4
请放心使用
有问题的话请追问
满意请及时采纳,谢谢
交互式命令就是在top命令执行过程中使用的一些命令。top命令用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况。该命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式命令进行设定显示。那么交互式命令都有哪些?
Linux命令中交互式命令都有哪些?
h或?显示帮助信息,给出交互式命令的一些说明总结。
Z全局颜色设置。
B全局字体加粗设置。
l切换是否显示平均负载和启动时间信息。
t切换是否显示进程和CPU状态信息。
m切换是否显示内存信息。
1数字1,用于多核CPU监控,可监控每个逻辑CPU的状况。
I Irix/Solaris模式。
f从当前显示列表中添加或删除项目。按“f"键之后会显示列的列表,按“a~z"键即可显示或隐藏对应的列,最后按回车键确定。
o改变top输出信息中显示项目的顺序。按小写的“a~z”键可以将相应的列向右移动,而按大写的“A~Z"键可以将相应的列向左移动,最后按回车键确定。
F或O选择排序的列。
R切换正常1反转排序。
H切换是否显示线程信息。
c切换是否显示完整命令行和命令名称信息。
i切换是否显示闲置进程和僵死进程。
S切换到累计模式。
x以高亮的形式排序对应列,需要结合b/z使用。
y高亮运行的进程,需要结合b/z使用。
z打开/关闭颜色。
b打开/关闭加粗。
u显示指定用户相关的进程信息。
n或#设置显示进程的最大行数。
k终止一个进程,系统将提示用户输入一个需要终止进程的PID。
r重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID,以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
d或s改变top输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是s。如果是小数,则换算成ms;如果输入0,那么系统输出将会不断刷新,默认刷新时间是3s。
test指令(使用指令man查询)功能:检查文件类型,值比较。
test的各种参数和使用。
test EXPRESSION1 –a EXPRESSION2
当表达式1和表达式2同时为真时值为真
test EXPRESSION1 –o EXPRESSION2
当表达式1或者表达式2为真时值为真
test –n STRING
或者
test STRING
当STRING串的长度不为零时值为真
test –z STRING
当STRING串长度为零时值为真
test STRING1 = STRING2
当STRING1和STRING2相同时值为真
test STRING1 != STRING2
当STRING1 和 STRING2不同时值为真
test INTEGER1 –eq INTEGER2
当INTEGER1等于INTEGER2时值为真
test INTEGER1 –ge INTEGER2
当INTEGER1大于或者等于INTEGER2时值为真
test INTEGER1 –gt INTEGER2
当INTEGER1 大于INTEGER2时值为真
test INTEGER1 –le INTEGER2
当INTEGER1小于等于INTEGER2时值为真
test INTEGER1 –lt INTEGER2
当INTEGER1 小于INTEGER2时值为真
test INTEGER1 –ne INTEGER2
当INTEGER1不等于INTEGER2时值为真
test FILE1 –ef FILE2
当FILE1和FILE2有同样的device和inode号时为真(详细见linux文件学习笔记)
test FILE1 –nt FILE2
当FILE1修改时间比FILE2新时值为真
test FILE1 –ot FILE2
当FILE1修改时间比FILE2旧时值为真
test –b FILE
FILE存在并且内容是block类型的
test –c FILE
FILE存在并且是字符类型的
test –d FILE
FILE存在并且是一个目录
test –e FILE
FILE是否存在
test –f FILE
FILE存在并且是一个正则表达式类型的文档
test –g FILE
FILE存在并且是 set-group-ID也就是SGID(详细见后文学习笔记)
test –G FILE
FILE存在并且由有效的GROUP ID所拥有(详细见后文学习笔记)
test –h FILE
FILE存在并且是一个符号链接(详细见后文学习笔记)
test –k FILE
FILE存在并且设置了sticky bit set(详细见后文学习笔记)
test –L FILE
FILE存在并且是一个符号链接
test –O FILE
FILE存在并且由一个有效的USER ID所拥有
test –p FILE
FILE存在并且是一个命名管道(命名管道见后文学习笔记)
test –r FILE
FILE存在并且授予了可读的权限
test –s FILE
FILE存在并且size大于0
test –S FILE
FILE存在并且是一个socket
test –t FD
文件的描述符FD在终端打开
test –u FILE
FILE存在并且SUID已经被设置
test –w FILE
FILE存在并且授予了写 *** 作权限
test –x FILE
FILE存在并且授予了可执行的权限
----------------------------------------------------------------------------------------------------------------------------------------------------
expr
expr是linux的手工命令行计数器,它可以帮助我们完成一些基本的表达式值运算。同时它也是一个字符串处理工具
(1) 整数运算
$expr ARG1 | ARG2
$expr ARG1 &ARG2
$expr ARG1 <ARG2
$expr ARG1 <= ARG2
$expr ARG1 = ARG2
$expr ARG1 != ARG2
$expr ARG1 >= ARG2
$expr ARG1 >ARG2
$expr ARG1 + ARG2
$expr ARG1 – ARG2
$expr ARG1 * ARG2
使用乘法时,需要使用反斜杠进行转义
$expr ARG1 % ARG2
(2) 字符串 *** 作
$expr length “xxx” //计算字符串长度
$expr substr “this is a”pos length //从第pos位开始截取length长度的子串
$expr index “tesr”e //获取e在主串中首次出现的位置
(3) 增量计数
例子
loop=3
loop=`expr $loop + 1`
echo $loop
结果是4,在第二行代码中,使用反引号,shell会将反引号中的内容作为一个系统命令,这样一来,就好像我们在命令行内输入了expr $loop + 1然后这个命令的返回结果被赋值到loop。
(4) 模式匹配(按照正则表达式模式匹配串)
通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次。
>VALUE=account.doc
>expr $VALUE : ’.*’
8
在expr中可以使用字符串匹配 *** 作,这里使用模式抽取.doc文件附属名。
$expr $VALUE : ‘\(.*\).doc’
accounts
(5) 其他
+ TOKEN
将TOKEN解释为串,不管它是一个关键字或者一个 *** 作符
延伸知识:
引号的作用
1 双引号(“”)
1)使用””可引用除字符$(美元符号)、`(反引号)、\(反斜线)外的任意字符或字符串。双引号不会阻止shell对这三个字符做特殊处理(标示变量名、命令替换、反斜线转义)。
Eg:name=geznecho “User name:$name”//将打印User name :gezn
Echo “The date is:`date +date-%d-%m-%Y`”//将打印The date is: 03-05-2009
Echo –e “$USER\t$UID” //将打印gezn 500
2)如果要查新包含空格的字符串经常用到双引号
2 单引号(’’)
1) 如果用单引号把字符串括起来,则dayi9nhao内字符串中的任何特殊字符的特殊含义均被屏蔽。
2) 举例:echo –e ‘$USER\t$UID’//将打印$USER $UID(没有屏蔽\t,是因为选项“-e”的缘故)
echo ‘USER\t$UID’ //将打印$USER\t$UID
3 反引号(``)
1) shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量
2) 举例:a=`date + date-%d-%m-%Y` //将打印The date is: 03-05-2009
4.反斜线(\)
1)如果下一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。
2)下属字符包含有特殊含义:&* + $ ` “ | ?
3) 在打印字符串时要加入八进制字符(ASCII相应字符)时,必须在前面加反斜线,否则shell作普通数字处。
举例: bj=Beijingecho ”variable\$bj=$bj”//将打印variable $bj = beijing
------------------------------------------------------------------------------------------------------------------------------------------------
Shell特殊变量
在Shell中,预先定义了几个有特殊含义的Shell变量,它们的值只能由Shell根据实际情况进行赋值,而不能通过用户重新设置。shell的特殊变量包括它的位置和一些系统变量.
(一)常用位置变量:
$# 命令行上实际参数的个数,但不包含Shell脚本名。
$? 上一条命令执行后的返回值(也称作 “退出码”)。它是一个十进制数。多数Shell命令执行成功时,则返回值为0;如果执行失败,则返回非0值。
$$ 当前进程的进程号。
$! 上一个后台命令对应的进程号,这是一个由1~5位数字构成的数字串。
$- 由当前Shell设置的执行标志名组成的字符串。例如:
set -xv 这个命令行给Shell设置了标志-x和-v(用于跟踪输出)。
$* 表示在命令行中实际给出的所有实参字符串,它并不仅限于9个实参。
$@ 它与$*基本功能相同,但是使用时加引号,并在引号中返回每个参数
$0 脚本名称
$1..$9 第N个参数
下面的aaa bbb 为变量名
${aaa:-bbb} 如果$aaa为空或未定义,则取值$bbb.否则取值$aaa
${aaa:+bbb} 如果$aaa非空,则取值$bbb,否则取值为空
${aaa:=bbb} 如果$aaa非空,则取值$aaa,否则取值$bbb而且赋值(aaa=bbb)
${aaa:3} 如果aaa=abcdefg,则${aaa:3}的值为:defg ,相当于substr,计数从0开始
${aaa:3:2} 如上${aaa:3:2}取值为: de.相当于substr
${#aaa} 字符串$aaa的长度.
(二)常用系统变量:
$HOME 用户的主目录
$USER 用户名称
$GROUP 用户所属组名
$PATH 默认的搜索路径
$HOSTNAME 主机名称
$TZ 时区
$MAIL 存放邮件的路径名
练手:
#!/bin/bash
echo $0
echo $*
echo $@
echo $#
echo $$
echo $_
在terminal窗口中执行:
./test.sh -a -b –c /home
./test.sh
-a -b -c /home
-a -b -c /home
4
3250
/home
区别$*和$@编写如下test.sh脚本:
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs "$*"
testargs "$@"
unset -f testargs
在terminal窗口中执行:
./test.sh -a -b /home
1 args //很明显就一个嘛,传入的是$*这个串,不是解释后的参数
3 args //$@必须和引号搭配,所以结果正确
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs $*
testargs $@
unset -f testargs
再次执行有:
./test.sh -a -b /home
3 args
3 args
作者:Aga.J
出处:http://www.cnblogs.com/aga-j
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)