Li Jinli
不必因昨天的眼泪、湿了今天的太阳。

1.3 使用shell进行数学运算

let命令可以直接执行基本的算术操作。当使用let时,变量名之前不需要加$:

 

let命令的其他用法;

l  自加操作:

 

l  自减操作:

 

l  简写形式:

 

let no+=6和let no-=6分别等同于let no=no+6和let no=no-6

l  其他方法

操作符【】的使用方法和let命令一样:

 

在【】中也可以使用$前缀:

 

也可以使用操作符(()),出现在(())中的变量名之前需要加上$:

 

expr也可以用于基本算术操作:

 

以上方法不支持浮点数,只支持整数运算,bc可以执行浮点数运算并使用一些高级函数:

 

l  设定小数精度:参数scale=2将小数位个数设置为2.所以bc将会输出包含两个小数位的数值:

 

l  进制转换,来看十进制与二进制相互转换:

 

l  计算平方与平方根

 

 

 

1.4 文件描述符与重定向

1.4.1 实战演练

(1)使用大于号将文本保存到文件中

 

该命令会将输出的文本保存到temp.txt中,如果该文件已经存在,大于号会清空该文件中先前的内容

(2)使用双大于号将文本追加到文件中

 

(3)当一个命令发生错误并退回时会返回一个非0的退出状态,而当命令成功完成时返回的0的退出状态。退出状态可以从$?中获得。这条命令会将stdeer文本打印到屏幕上而不是文件中(stdout没有输出,所以out.txt内容为空):

 

使用2>将stdeer重定向到out.txt

 

 

其中输出的第二行属于stderr信息,可以将其重定向到一个文件中,同时将stdout信息发送到终端:

 

有一种方法既可以将数据重定向到文件,还可以提供一份重定向数据的副本作为管道中后续命令的stdin,tee命令从stdin中读取,然后将输人数据重定向到stdout以及一个或多个文件中。在下面的代码中,tee命令接收到来自stdin的数据。它将stdout的一份副本写入文件out.txt,同时将另一份副本作为后续命令的stdin。命令cat -n为从stdin中接收到的每一行数据前加上行号并将其写入stdout :

 

查看文件out.txt的内容:

 

错误输出没有在文件中出现,因为这些信息被送到了stderr,而tee只能从stdin中获取,默认情况下tee命令会覆盖之前的文件内容,但是-a选项可以追加

 

1.4.2 补充内容

1.重定向脚本内部的文本块

可以将脚本中的文本重定向到文件。要想将一条警告信息添加到自动生成的文件顶部,可以使用下面的代码:

 

出现在cat <<EOF>log .txt与下一个EOF行之间的所有文本行都会被当作stdin数据。log.txt文件的内容显示如下:

 

2.自定义文件描述符

exec命令创建全新的文件描述符,创建一个用于读取文件的文件描述符:

 

可以这样使用:

 

如果要再次读取就不能使用3了,而是要重新创建一个新的文件描述符来从另一个文件中读取或重新读取上一个文件。

创建一个用于写入的文件描述符:

 

创建一个追加写入的文件描述符:

 

 

 

posted on 2021-01-29 10:43  lijinli  阅读(100)  评论(0)    收藏  举报