linux交互式命令
假若您正在阅读本文,这么您除了会熟悉计算机系统上的命令行,但是很愿意使用它来排除图形界面,这很有可能。据我了解,我仍然在使用命令行,由于那是估算世界中的惟一选择,甚至可以溯源到BSDUnix。现代GUI有好多使它们愈加出众的方式,并且就功能,速率和灵活性而言,命令行一直摇摇欲坠,假若您可以快速键入,则更是这么。
在典型的Unix或Linux系统中,命令行中缺乏个别功能,但非常是功能强悍且灵活的估算器。您可以使用expr甚至shell$(())表示法,而且它们十分有限,当您尝试求解10/3或其他非简单整数物理的运算时,这将立刻显而易见。
您可以使用基本的估算器bc,但这是一种只有沮丧的旧式黑客才可能喜欢的语言的工具,但是这种年来始终很难理解它在系统中的用途。bc界面笨拙,缺乏有用的命令行选项,因而bc一直是操作系统的一部份是一个谜。
辛运的是,我们谈论的是Linux,这意味着我们可以通过在提供所需所需原始功能的工具周围包装更好的插口来解决问题,这在Linux术语中,即便是“包装程序”。
这就是Bashshell脚本calc的功能-提供一个简单,用户友好的命令行估算器。它甚至具有有用的默认值,因而您何必记住在求解10/3之前将小数精度设置为非零。
与卑诗省合作
bc被誉为任意精度的二补码估算器,而且奇怪的是,它的默认行为是在没有任何提示的交互式机壳中仅使用整数值。这是一个典型的交互:
$ bc
1
+
1
2
10
/
3
3
quit
输入一个物理方程式并将其求解嵌入式linux,并显示结果。并且10/3还是3?为了解决这个问题,bc用户很快就熟悉了scale,它可以让您指定显示结果的精度。较高的小数位数在小数点后提供更多位数。如:
10
/
3
3
scale
=
4
10
/
3
3.3333
scale
=
20
10
/
3
3.33333333333333333333
quit
这真是足够的信息,您可以了解怎样生成简单的命令行友好的浮点估算器作为shell脚本:
这个看法很简单:无论用户指定作为命令的一个或多个参数,将其直接输入bc,并且通过将scale设置为2作为其开头。在实践中,它早已十分有用:
$ calc
'(100/3) * 2 + (11 + 333.5)'
411.16
还不错而且,让我们采用这个简单的看法,并将其弄成一个交互式估算器机壳linux 交互命令启动,您可以在其中打开一个窗口,但是每每遇见方程式时,只需将其复制/粘贴并快速求解即可。
Calc:交互式估算器
里面的小shell脚本可以弄成一个简单的函数而毋须大惊小怪,最终看上去像这样:
scriptbc
(
)
{
scale =
$1 ;
shift
cat
<< EOF
|
$bc
scale =
$scale
$*
EOF
}
在shell脚本中调用此函数时,您须要记住的就是,第一个参数仍然是所需的比列,否则bc肯定会倍感疑惑。
但这是坚苦的工作。如今,主循环出奇的简约:
while
read
command args
do
case
$command
in
quit
|
exit
)
exit
0
;;
help
| ?
) show_help
;;
scale
)
scale =
$args
;;
*
) scriptbc
$scale
" $command "
" $args "
;;
esac
/ bin
/
echo
-n
"calc> "
done
不太复杂,而且还添加了附加的帮助功能。请注意,聪明的方式是,Bashshell中,您可以与工作readwhile句子中的命令too-read总是击穿哪些用户在键入每列变一个字,并在最后给出的变量的一切。为此,假如用户键入1+1表示readcommandargs表示command=“1+1”,而且假如用户键入“1+1”,则命令=“1”和args=“+1”。在这两种情况下,它都可以正常工作,然而,其实,这样用户也可以指定命令字。
一些额外的echo词句使事情显得很漂亮,我们有一个真正的交互式估算器,具有好多功能,全部由bc提供支持:
$ calc
Calc--a simple calculator. Enter
'help'
for
help ,
'quit' to quit.
calc
>
help
In addition to standard math functions, calc also supports:
a
% b = remainder of a
/ b
a^b = exponential: a raised to the b power
s
( x
) = sine of x, x
in radians
c
( x
) = cosine of x, x
in radians
a
( x
) = arctangent of x,
in radians
l
( x
) = natural log of x
e
( x
) = exponential log of raising e to the x
j
( n,x
) = Bessel
function of integer order n of x
scale N = show N fractional digits
( default =
2
)
calc
> s
(
1
)
.84
calc
>
100 +
(
10
*
3.55
)
135.50
calc
>
5545 +
11 –
4.55
5551.45
calc
>
10
/
3
3.33
calc
> quit
虽然它的界面可能很奇怪,但事实证明,bc在其广为人知的地方还有其他方法linux windows,包括用户设置和使用变量的能力,使其更像是一种物理编程语言。问题是,此脚本每行调用一次bc的方法,未能在两次调用之间保留状态。这意味着即便用户可以输入例如cars=25句子,而且假如她们随即在下一行中引用该变量,则该变量将从bc的显存中消失。
卑诗省拥有隐藏的超级大国,但…
bc还支持各类编程结构,包括if,while和for句子,暂停,中断,continuefor循环管理和功能。但谦虚地说:假如您真的想编撰一个解决物理方程式的简约程序,则有更好的选择,从Perl到小型超级强悍的工具(如Matlab)。
虽然我特别喜欢渐进式特点主义背后的创新精神linux 交互命令启动,但要认识到给定程序的局限性和功能,还有好多话要说,而不是花好多时间使它显得更复杂,而只是接受它可以解决一些问题,但不是全部-这个领域中的问题。确实,虽然bc支持函数,命令流和变量,但我怀疑您很难在使用该功能的现代Unix或Linux系统上找到单个脚本,而且可能在没有人注意的情况下将其从bc中删掉。
快速,简单的解决方案仍然是命令行界面的强悍功能,也是使Unix系统设计这么强悍的缘由,这仍然是命令行界面的强悍功能。我和我的专著者在《WickedCoolShellScripts2ndEdition》一书中特别详尽地阐述了这个概念,提供了100多个Bashshell脚本以使您赞叹不已。并且,更根本地讲,无论您是在MacOS命令行,Linux系统还是旧式Unix服务器上,我们都使用脚本在命令行的山墙上添加一层新的灰浆。
倘若您常常使用命令行,您会震惊于我们的脚本集合(比如calc)将为您提供的帮助。虽然,用小的砖块和小的灰浆铲刀能够缔造伟大的建筑,对吗?
翻译自:
linux交互式命令