shell学习04:命令的替换、数学计算


1. 命令的替换

命令替换的两种方式:1)反引号;2)$( )

[kiosk@foundation60 shell命令的替换]$ cat 01.sh
#!/bin/bash
begin_time=`date`
sleep 10s
finish_time=$(date)
echo "Begin time: $begin_time"
echo "Finish time: $finish_time"
[kiosk@foundation60 shell命令的替换]$ sh 01.sh 
Begin time: Fri Jan 31 12:02:36 CST 2020
Finish time: Fri Jan 31 12:02:46 CST 2020
  • 使用date命令的%s格式控制符可以得到当前的UNIX时间戳,这样就可以直接计算脚本的运行时间了。UNIX时间戳是指从1970年1月1日00.00.00 到目前为止的秒数。
[kiosk@foundation60 shell命令的替换]$ cat 02.sh 
#!/bin/bash
begin_time=`date +%s`
sleep 5s
finish_time=$(date +%s)
run_time=$((finish_time-begin_time))
echo "Begin time: $begin_time"
echo "Finish time: $finish_time"
echo "run time: ${run_time}s"
[kiosk@foundation60 shell命令的替换]$ sh 02.sh 
Begin time: 1580443386
Finish time: 1580443391
run time: 5s
  • 如果被替换的命令的输出内容包括多行,或者含有多个连续的空白符,那么在输出变量时应该将变量用双引号包围,否则系统会使用默认的空白符来填充,这会导致换行无效,以及连续的空白符被压缩成一个。
[kiosk@foundation60 shell命令的替换]$ cat 03.sh 
#!/bin/bash
LSL=`ls -l`
echo $LSL  # 不使用双引号包围
echo "___________________"
echo "$LSL"  # 使用引号包围
[kiosk@foundation60 shell命令的替换]$ sh 03.sh 
total 12 -rw-r--r--. 1 kiosk kiosk 125 Jan 14 03:13 01.sh -rw-r--r--. 1 kiosk kiosk 198 Jan 14 03:17 02.sh -rw-r--r--. 1 kiosk kiosk 73 Jan 14 03:19 03.sh
___________________
total 12
-rw-r--r--. 1 kiosk kiosk 125 Jan 14 03:13 01.sh
-rw-r--r--. 1 kiosk kiosk 198 Jan 14 03:17 02.sh
-rw-r--r--. 1 kiosk kiosk  73 Jan 14 03:19 03.sh

2. 数学计算

shell运算符

算术运算符 说明
+、- 加法、减法
*、/、% 乘法、除法、取余
** 幂运算
++、– 自增、自减(可以放在变量的前面也可以放在变量的后面)
!、&&、I I 逻辑非(取反)、逻辑与(and)、逻辑或(or)
<、<=、>、>= 比较符号(小于、小于等于、大于、大于等于)
==、!=、= 比较符号(相等、不相等、相当于)
<<、>> 向左移位、向右移位
~、I、&、^ 按位取反、按位或、按位与、按位异或
=、+=、-=、*=、/=、%= 赋值运算符,例如a+=1相当于a=a+1

数学计算命令

运算命令 说明
(()) 用于计算整数,效率高,推荐使用
let 用于计算整数,和(())类似
expr 可用于整数运算,也可以处理字符串。不推荐使用
bc linux下的一个计算器程序,可以处理整数和小数。shell本身只支持整数运算,向计算小数就得使用bc这个外部计算器
[kiosk@foundation60 shell的数学计算]$ ((a=4-1))
[kiosk@foundation60 shell的数学计算]$ echo $a
3
[kiosk@foundation60 shell的数学计算]$ ((b=9+6))
[kiosk@foundation60 shell的数学计算]$ echo $b
15
[kiosk@foundation60 shell的数学计算]$ ((c=a+b))
[kiosk@foundation60 shell的数学计算]$ echo $c
18
  • (())前面加上$符号获取(())命令的执行结果,即获取整个表达式的值。
[kiosk@foundation60 shell的数学计算]$ a=$((11+8))
[kiosk@foundation60 shell的数学计算]$ echo $a
19
[kiosk@foundation60 shell的数学计算]$ b=$((a+8))
[kiosk@foundation60 shell的数学计算]$ echo $b
27
[kiosk@foundation60 shell的数学计算]$ echo $((1+5))
6
[kiosk@foundation60 shell的数学计算]$ i=3
[kiosk@foundation60 shell的数学计算]$ ((i=i**2))
[kiosk@foundation60 shell的数学计算]$ echo $i
9
[kiosk@foundation60 shell的数学计算]$ ((a=3+4,b=4+1)) #以逗号分隔多个表达式
[kiosk@foundation60 shell的数学计算]$ echo $a $b
7 5
[kiosk@foundation60 shell的数学计算]$ c=$((1+8,a+b))  # 以最后一个表达式的结果作为整个(())命令的执行结果
[kiosk@foundation60 shell的数学计算]$ echo $c
12
  • 比较大小
[kiosk@foundation60 shell的数学计算]$ echo $((8<3))
0
[kiosk@foundation60 shell的数学计算]$ echo $((8>3))
1
[kiosk@foundation60 shell的数学计算]$ echo $((8==8))
1
  • a++、a–、++a、–a
# a++:先赋值再加
[kiosk@foundation60 shell的数学计算]$ a=10
[kiosk@foundation60 shell的数学计算]$ echo $((a++))
10
[kiosk@foundation60 shell的数学计算]$ echo $a
11
# a--:先赋值再减
[kiosk@foundation60 shell的数学计算]$ a=10
[kiosk@foundation60 shell的数学计算]$ echo $((a--))
10
[kiosk@foundation60 shell的数学计算]$ echo $a
9
# ++a:先加再赋值
[kiosk@foundation60 shell的数学计算]$ a=10
[kiosk@foundation60 shell的数学计算]$ echo $((++a))
11
[kiosk@foundation60 shell的数学计算]$ echo $a
11
# --a:先减再赋值
[kiosk@foundation60 shell的数学计算]$ a=10
[kiosk@foundation60 shell的数学计算]$ echo $((--a))
9
[kiosk@foundation60 shell的数学计算]$ echo $a
9
  • let以空格分隔多个表达式
[kiosk@foundation60 shell的数学计算]$ a=10 b=12
[kiosk@foundation60 shell的数学计算]$ let c=a+b
[kiosk@foundation60 shell的数学计算]$ echo $c
22
[kiosk@foundation60 shell的数学计算]$ i=2
[kiosk@foundation60 shell的数学计算]$ let i+=6
[kiosk@foundation60 shell的数学计算]$ echo $i
8
[kiosk@foundation60 shell的数学计算]$ a=10 b=23
[kiosk@foundation60 shell的数学计算]$ let a+=4 c=a+b
[kiosk@foundation60 shell的数学计算]$ echo $a $c
14 37
  • expr需要用反引号将计算表达式括起来,表达式内的数字和计算符之间要用空格分开
[kiosk@foundation60 shell的数学计算]$ expr 2+2
2+2
[kiosk@foundation60 shell的数学计算]$ expr 2 + 2
4
[kiosk@foundation60 shell的数学计算]$ expr 2 / 2
1
[kiosk@foundation60 shell的数学计算]$ i=3
[kiosk@foundation60 shell的数学计算]$ i=`expr $i + 6`
[kiosk@foundation60 shell的数学计算]$ echo $i
9
  • bc是unix/linux下的计算器
[kiosk@foundation60 shell的数学计算]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
2+2.4
4.4
[kiosk@foundation60 shell的数学计算]$ echo 3+5|bc
8
[kiosk@foundation60 shell的数学计算]$ echo 3.4+2.1|bc
5.5
[kiosk@foundation60 shell的数学计算]$ echo 8/3|bc
2
[kiosk@foundation60 shell的数学计算]$ echo "scale=3;355/113"|bc   # scale给于保留位数
3.141
发布了106 篇原创文章 · 获赞 1 · 访问量 2365

猜你喜欢

转载自blog.csdn.net/weixin_43384009/article/details/104122734