sleep延时
sleep 时间值
- 单位默认为s(秒),可以使用m(分钟)、h(小时)、d(天)
- sleep inf 表示无限期延时
watch周期性执行命令
watch命令来自procps-ng包,它会周期性地执行所给定的命令,且可以比较每次命令输出的不同,适合用来监控系统状态、观察命令结果的实时变化等
watch [选项] 命令
- 默认情况下,命令每2秒刷新一次
- -n 秒数:指定每隔多少秒刷新一次,单位为秒,最小值为0.1s
- -d 高亮显示输出中变化的部分
- --differences[=permanent]:该选项是-d选项的完整长选项,长选项支持添加一个可选参数permanent,如果添加了该参数,watch命令将显示自第一次输出以来的所有更改,而不是对比上一次输出结果
- -t 隐藏标题栏,默认情况下,命令首行会显示刷新时间、命令、刷新间隔等信息,该选项会将这些信息隐藏
- -e 在命令出错时冻结输出结果,且在用户按下键盘后退出,可用来保留错误输出信息
- -x 允许传递参数给监控的命令,如:watch -x ls -l /home/user 表示将-l和/home/user路径传递给ls命令,而不是watch命令
- -p 精确刷新,即使刷新需要的时间超过设定的间隔时间,也会严格按照时间间隔重新刷新一次
- -g 在命令输出发生变化时退出
- -q 次数值:如果命令输出在给定的循环次数内没有变化,则退出
1.默认情况下,命令会在第一行输出刷新时间、所执行的命令、当前时间等信息,然后再输出命令的输出
如执行:watch ls
输出信息如下:
Every 2.0s:ls VM-0-4-ubuntu: Sun Oct 27 02:24:10 2021
identifyOS.sh #本行开始为命令的实际输出信息
praC.c
prac.out
zsh
2. 指定刷新间隔
watch -n 4 -d df -h
3. df命令执行3次,如果每次命令输出都一致,则退出
watch -n 2 -q 3 df -h
bc计算器
bash主要是用来处理文本命令的,数值运算能力较差,只支持一些基本的整形运算,进行浮点数运算通常要借助bc计算器。bc(Basic Calculator)是一个外部命令,通常位于/usr/bin/bc 或 /bin/bc路径下,一般情况下大多数 Linux 发行版默认都会包含这个工具,同时它也是一种编程语言,支持在命令行中进行浮点数运算,该语法支持:
- 基本算术运算:支持加、减、乘、除和取余等基本运算
- 浮点运算:默认情况下,bc执行整数运算,但通过设置小数点精度,可以进行浮点运算
- 简单的变量和数组
- 注释,以#和/* */为注释
- 逻辑和条件操作:支持逻辑运算符如<, >, ==, !=等,可以在脚本中使用if条件语句
- 循环:支持while和for循环,可以用来编写较为复杂的计算脚本
- 自定义函数
命令
bc [选项] [文件]
- 默认情况下,bc命令进行整数运算,通过scale变量可以指定小数位数,进行浮点数运算,并且打开bc时默认会打印版本信息
- -q 安静模式,不打印版本信息、GNU提示信息,其长选项为--quiet
- -l 加载数学库,可以使用sin、sqrt等数学函数
变量
bc内部预定义了几个变量:
预定义变量
变量名 | 说明 |
---|---|
scale | 小数位数,默认为0 |
ibase | 输入数值的进制,默认为10,该变量支持的值为2-16,输入的数字支持0-9和A-F,字母必须大写,小写用于声明变量名 |
obase | 输出数值的进制,默认为10 |
last | 上一个打印的数值(GNU拓展) |
自定义变量
- 变量名以字母开头,后面可以是任意数量的字母、数字、下划线
- 变量名必须小写,大写字母被用来识别十六进制的数值输入
使用
1. 在命令行下,我们可以直接输入bc命令唤起bc计算器,通过quit命令退出
$ 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'.
12 * 5.4
64.8
2. 在进行浮点数运算时,尤其进行除法运算,需要先设置内置变量scale的值,它决定了计算结果保留的小数位数,默认为0
$ bc -q
3.44 / 5
0 #未设置scale值,导致运算结果无小数
scale=4
3.44 / 5
.6880
quit
3. bc也支持变量和print输出语句
在脚本中,可以使用命令替换来运行bc,常用格式如下:
$(echo "变量1;变量2..; 表达式" | bc)
e.g.计算100/30并保留4位小数
var1=100
var2=30
var3=$(echo "scale=4; $var1 / $var2" | bc)
echo "计算结果为:" $var3
4. 如果需要大量运算,则可以借助内联重定向,一次输入多个数据,语法格式为:
变量=$(bc << EOF
变量1
变量2
运算1
运算2
...
EOF
)
e.g.进行多项运算
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)
echo "最终结果为:" $var5