一、反引号
反引号允许将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博客 ” ,链接:https://blog.itpub.net/23655288/viewspace-734518/ ,如需转载,请注明出处,否则将追究法律责任。