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