<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://www.gentoo-zh.org/extern.php?action=feed&amp;tid=525&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / linux下的shell运算（加、减、乘、除）]]></title>
		<link>https://www.gentoo-zh.org/viewtopic.php?id=525</link>
		<description><![CDATA[linux下的shell运算（加、减、乘、除） 最近发表的帖子。]]></description>
		<lastBuildDate>Sun, 13 Nov 2022 09:56:06 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[linux下的shell运算（加、减、乘、除）]]></title>
			<link>https://www.gentoo-zh.org/viewtopic.php?pid=562#p562</link>
			<description><![CDATA[<p>((i=$j+$k))&#160; &#160; &#160;等价于 i=`expr $j + $k`<br /> ((i=$j-$k))&#160; &#160; &#160;等价于&#160; &#160;i=`expr $j -$k`<br /> ((i=$j*$k))&#160; &#160; &#160;等价于&#160; &#160;i=`expr $j \*$k`<br /> ((i=$j/$k))&#160; &#160; &#160;等价于&#160; &#160;i=`expr $j /$k`</p><br /><p>Let expressions 执行一个或多个表达式。表达式中的变量前不必有$.如果表达式中包含了空格或其他特殊字符，则必须引起来。</p><p>例：let “I = I + 1” 或 let i=i+1</p><p> </p><p>算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。</p><p>— +：对两个变量做加法。</p><p>— -：对两个变量做减法。</p><p>— *：对两个变量做乘法。</p><p>— /：对两个变量做除法。</p><p>— **：对两个变量做幂运算。</p><p>— %：取模运算，第一个变量除以第二个变量求余数。</p><p>— +=：加等于，在自身基础上加第二个变量。</p><p>— -=：减等于，在第一个变量的基础上减去第二个变量。</p><p>— *=：乘等于，在第一个变量的基础上乘以第二个变量。</p><p>— /=：除等于，在第一个变量的基础上除以第二个变量。</p><p>— %=：取模赋值，第一个变量对第二个变量取模运算，再赋值给第一个变量。</p><p>在使用这些运算符时，需要注意到运算顺序的问题。例如输入下面的命令，输出1+2的结果。</p><p>echo 1+2</p><p>Shell并没有输出结果3，而是输出了1+2。在shell中有三种方法可以更改运算顺序。</p><p>— 用expr改变运算顺序。可以用echo `expr 1 +2`来输出1+2的结果，用expr表示后面的表达式为一个数学运算。需要注意的是，`并不是一个单引号，而是“Tab”键上面的那个符号。</p><p>— 用let指示数学运算。可以先将运算的结果赋值给变量b，运算命令是b=let 1 + 2。然后用echo$b来输出b的值。如果没有let，则会输出1+2。</p><p>— 用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中，中括号中的内容将先进行数学运算。例如命令echo$[1+2]，将输出结果3。</p><p>下面是一个shell程序实例，实现数学函数S=3(xy)+4x2+5y+6的运算。在程序中以位置变量的方式输入x与y的值。程序的编写步骤如下所示。</p><p> 在主菜单中打开一个终端。在终端中输入“vim”命令打开VIM。</p><p> 在VIM中按“i”键进入插入模式，然后输入下面的代码。</p><p>代码4-2&#160; 数学运算实例：\源文件\04\4.4.sh</p><p>#!/bin/bash</p><p>#4.4.sh</p><p>s=0&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; #定义一个求和变量，初值为0。</p><p>t=`expr$1**$2`&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; #用expr改变运算顺序，求x的y次方。</p><p>t=$[t*3]&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;#t乘以3。</p><p>s=$[s+t]&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;#结果相加。</p><p>t=$[$1**2]&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;#求x的平方。</p><p>t=$[t*4]&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;#结果乘以4。</p><p>s=$[s+t]&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;#结果相加。</p><p>t=`expr$2*5`&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; #求5y的值。</p><p>s=$[s+t]&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;#结果相加。</p><p>s=$[s+6]&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;#结果加上6。</p><p>echo$s&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; #输出结果。</p><p>echo$((a%b))&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; #取余</p><p> 在这个程序中，需要注意算术运算的写法。如果没有expr或$[]更改运算顺序，则会将运算式以字符串的形式赋值，而不会赋值运算结果。</p><p> 按“Esc”键返回到普通模式。然后输入“:w 4.4.sh”保存文件。</p><p> 输入“:q”命令，按“Enter”键退出VIM。</p><p> 在终端中，输入下面的命令对4.4.sh文件添加可执行权限。</p><p>chmod +x 4.4.sh</p><p> 输入下面的命令运行程序。在命令中需要输入两个参数。</p><p>./4.4.sh 2 4</p><p> 程序会完成S=3(xy)+4x2+5y+6的数学运算并输出结果，结果如下所示。</p><p>90</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Sun, 13 Nov 2022 09:56:06 +0000</pubDate>
			<guid>https://www.gentoo-zh.org/viewtopic.php?pid=562#p562</guid>
		</item>
	</channel>
</rss>
