ITPub博客

首页 > Linux操作系统 > Linux操作系统 > linuxSHELL学习之反引号、expr、bc

linuxSHELL学习之反引号、expr、bc

原创 Linux操作系统 作者:haha牛 时间:2012-07-04 11:17:15 0 删除 编辑

一、反引号
反引号允许将shell命令的输出赋值给变量。
[root@t1 ~]# testing=`date`
[root@t1 ~]# echo $testing
2012年 07月 03日 星期二 20:09:06 CST
[root@t1 ~]# testing=`date +%y%m%d`  ---使用两位数字来显示年、月、日
[root@t1 ~]# echo $testing
120703
[root@t1 ~]# cat t53.sh     ---应用日期做log文件名的实例
#!/bin/bash
today=`date +%y%m%d`
ls -l /root |grep .sh >log.$today
[root@t1 ~]# ./t53.sh
[root@t1 ~]# cat log.120703
-rwxr--r-- 1 root   root    159 07-02 18:29 t13.sh
-rwxr--r-- 1 root   root    155 07-02 18:44 t14.sh
-rwxr--r-- 1 root   root    155 07-02 18:45 t15.sh
-rwxr--r-- 1 root   root    184 07-02 18:55 t16.sh
-rwxr--r-- 1 root   root    139 07-02 19:00 t17.sh
-rwxr--r-- 1 root   root    123 07-02 19:05 t18.sh
-rwxr--r-- 1 root   root    247 07-02 19:28 t19.sh
二、expr命令
expr允许处理命令行中的等式

[root@t1 ~]# expr 3+4  ---没有空格不会进行计算
3+4
[root@t1 ~]# expr 3 + 4 ---带空格得到想要的结果
7
[root@t1 ~]# expr 8 * 6  ---对“*”要进行转义
expr: 语法错误
[root@t1 ~]# expr 8 \* 6  ---转义后得到想要的结果
48
也可以使用括号来实现数学计算
[root@t1 ~]# var1=$[ 4 + 8 ]
[root@t1 ~]# echo $var1
12
[root@t1 ~]# var2=$[ 7 * 8 ] ---不用转义“*”,因为在括号内,shell不会把它解释为通配符
[root@t1 ~]# echo $var2
56
[root@t1 ~]# cat t54.sh   ---这是bash shell的一个缺陷,它只支持整数算法。**Z shell支持浮点算数运算
#!/bin/bash
var1=100
var2=45
var3=$[ $var1 / $var2 ]
echo the final result is:$var3

[root@t1 ~]# ./t54.sh
the final result is:2  ---结果为整数
三、浮点解决方案
linux有一个内置的bash计算器(称为bc)。
[root@t1 ~]# bc -q  ---进入bc计算器
12*5.4
64.8
3.125*(3+5)
25.000
quit  ---推出计算器
[root@t1 ~]# bc -q
6.7/8
0
scale=5  ---scale默认值是0,它代表保留小数点后的位数
6.7/8
.83750
[root@t1 ~]# bc -q   ---bc也识别变量
var1=10
var1*4
40
var2=var1/5
print var2     ---使用print输出变量
2
quit
***在脚本中使用bc
variable=`echo "options; expression" | bc`
第一部分options允许设置变量,如果需要设置多个变量,使用分号将他们隔开。expression参数定义了使用bc计算的数学表达式。
[root@t1 ~]# var1=`echo " scale=6; var2=6; $var2/2.2" | bc`
[root@t1 ~]# echo $var1
25.454545
***bc支持内置输入重定向方法
variable=`bc << EOF
options
statements
expressions
EOF
`
EOF文本字符串表明内置重定向数据的开始和末尾,记住仍然需要反引号字符把bc命令的输出结果赋值给变量。
[root@t1 ~]# var1=`bc << EOF
> scale=4
> a1=45.6*3
> a2=a1+55
> a2 * 2
> EOF
> `
[root@t1 ~]# echo $var1
383.6


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23655288/viewspace-734518/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-04-04

  • 博文量
    102
  • 访问量
    299329