shell 运算符全攻略

来源:互联网 发布:四驱车跑道知乎 编辑:程序博客网 时间:2024/06/11 02:42


算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。
— +:对两个变量做加法。
— -:对两个变量做减法。
— *:对两个变量做乘法。
— /:对两个变量做除法。
— **:对两个变量做幂运算。
— %:取模运算,第一个变量除以第二个变量求余数。
— +=:加等于,在自身基础上加第二个变量。
— -=:减等于,在第一个变量的基础上减去第二个变量。
— *=:乘等于,在第一个变量的基础上乘以第二个变量。
— /=:除等于,在第一个变量的基础上除以第二个变量。
— %=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。
在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。
echo 1+2
Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。
— 用expr改变运算顺序。可以用echo `expr 1 + 2`来输出1+2的结果,用expr表示后面的表达式为一个数学运算。需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。
— 用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let 1 + 2。然后用echo $b来输出b的值。如果没有let,则会输出1+2。
— 用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算。例如命令echo $[1+2],将输出结果3。
下面是一个shell程序实例,实现数学函数S=3(xy)+4x2+5y+6的运算。在程序中以位置变量的方式输入x与y的值。程序的编写步骤如下所示。

在主菜单中打开一个终端。在终端中输入“vim”命令打开VIM。

在VIM中按“i”键进入插入模式,然后输入下面的代码。
代码4-2 数学运算实例:/源文件/04/4.4.s

#!/bin/bash
#3(xy)+4*2x+5y+6
echo "please enter x and y:"
s=0                                     #定义一个求和变量,初值为0。
read x y
t=`expr $x*$y`                         #用expr改变运算顺序,求x*y。
t=$[t*3]                                #t乘以3。
s=$[s+t]                                #结果相加。
t=$[$x*2*4]                             #结果乘以4*2。
s=$[s+t]                                #结果相加。
t=`expr $y*5`                           #求5y的值。
s=$[s+t]                                #结果相加。
s=$[s+6]                                #结果加上6。
echo $s >> r.txt                                 #输出结果。

 

4.6 输入和输出
输入指的是shell程序读入数据,可以从文件读取或从用户输入读取等方式读入数据。输出指的是shell程序的运行结果的处理,可以显示到屏幕或保存到文件。本节将讲述shell程序的输入和输出。

4.6.1 echo命令输出结果
echo命令可以输出文本或变量的值,是shell中最常用的输出方式。结果可以输出到终端,也可以写入到文件。该命令的用法如下所示。
echo $str                           #将结果输出到终端。
echo $str >file                     #将结果保存到文件file中,如果没有文件会新建一
                                    #个文件。如果已经有文件则会覆盖以前的文件。
echo $str >>file                    #将结果追加到文件file中。
echo输出的内容可以有下面的格式控制字符。
— /c:末尾加上/c表示这一行输出完毕以后不换行。
— /t:输出一个跳格,相当于按下“Tab”键。
— /n:输出一个换行。

需要注意的是,如果要输出特殊字符,必须加-e选项,否则输出的结果中会直接输出字符。加-n选项可以禁止echo输出后的换行。例如下面是使用echo进行输出的例子。

从主菜单中打开一个终端。

在终端中输入下面的命令,输出一行文本。
echo “hello ,Beijing”

按“Enter”键,运行结果如下所示。
hello ,Beijing

在输出内容中加入一个换行,输入如下所示命令。
echo “hello ,/nBeijing”

按“Enter”键,运行结果如下所示,换行符/n被直接输出,并没有换行。
hello ,/nBeijing

如果需要在输出内容中显示换行,需要在echo后加-e选项。输入下面的命令。
echo -e “hello ,/nBeijing”

按“Enter”键,运行结果如下所示。换行符/n处输出了一个换行。
hello,
Beijing

在文本中输出几个跳格,输入下面的命令。
echo -e “hello ,/t/t/tBeijing”

按“Enter”键,运行结果如下所示。
hello ,         Beijing

将结果输出到文件。在终端中输入下面的命令。
echo “hello ,Beijing .” >a.txt

按“Enter”键。在终端中没有输出显示。输入“vim a.txt”命令,用VIM查看a.txt文件。可以发现文件a.txt中有下面的文本。
hello ,Beijing .

再次向这个文本中输出结果,在终端中输入如下的命令。
echo “abcde” >a.txt

按“Enter”键。在终端中没有输出显示。输入“vim a.txt”命令查看文件a.txt。可以发现文件中有下面的文本。第二次的输出覆盖了第一次输出时建立的文件。
abcde

用追加的方法向这个文本中输出结果,在终端中输入如下的命令。
echo “hijkl” >>a.txt

按“Enter”键。在终端中没有输出显示。输入vim a.txt命令查看文件a.txt。文本的内容如下所示,第二次的输出追加到了第一次输出结果的末尾。
Abcde
hijkl
[z1]

4.6.2 read命令读取信息
read命令可以从键盘或文件中读入信息,并赋给一个变量。read命令读取信息的各种方法如下所示。
— 如果只读入一个变量,会把键盘上输入的所有信息赋值给这个变量。按“Enter”键结束输入。
— 如果输入多个变量,用空格键将输入的变量隔开。如果输入变量的个数多于需要读取变量的个数,将会把剩余的变量赋值给最后一个变量。
— 在读取语句后面添加例如下面的操作,就是从键盘或文本文件读取变量。

从主目录中打开一个终端。

在主目录中输入下面的命令,读取一个变量赋值给A。
read A

按“Enter”键,终端会等待用户的输入。在终端中输入下面的字符。
asdf

按“Enter”键,再输入“echo $A”命令输出变量的值。显示的结果如下所示。
asdf

读取多个字符串的变量。在终端中输入“read A”命令。然后按“Enter”键,在光标后面输入下面的字符串。
asd fgh jkl

在终端中输入“echo $A”命令显示这个变量,按“Enter”键后显示的结果如下所示。
asd fgh jkl

读取多个变量。在终端中输入下面的命令,然后按“Enter”键。
read A B C

在终端中等待光标后面输入下面的字符串。
aaa sss ddd

在终端中分别输入下面的命令输出变量的值。然后按“Enter”键。
echo $A
echo $B
echo $C

三次命令的运行结果分别如下所示。
aaa
sss
ddd

如果输入的数据多于需要读取的字符串,将会把多余的输入信息赋值给最后一个变量。在终端中输入下面的命令。
read A B

按“Enter”键执行命令,在光标处输入下面的字符串。
aaa bbb ccc ddd

输出变量。在终端中输入“echo $A”命令,然后按“Enter”键,会输出aaa。再输入“echo $B”命令,按“Enter”键执行,终端中输出的结果如下所示。
bbb ccc ddd

从文件中读取信息。在终端中输入“vim”命令,打开VIM。
在VIM中按“i”键进入到插入模式。然后输入下面的字符串。
aaa bbb

按“Esc”返回到普通模式。输入“:w a.txt”命令,再按“Enter”键,保存这个文件。再输入“:q”命令,退出VIM。

在终端中输入下面的命令,从文本中读取字符串并赋值给变量。
read A B

输出变量。在终端中输入命令“echo $A”命令,然后按“Enter”键,终端中会显示aaa。输入“echo $B”命令,然后按“Enter”键,终端中会显示bbb。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/57287/showart_2186102.html

原创粉丝点击