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
xargs参数传递
xargs用来从标准输入构建命令行参数,并将其传递给后续的命令。与管道符不同的是,管道符是将前一个命令的标准输出(stdout)传递给 后一个命令的标准输入(stdin),而xargs命令会将上一个命令的输出 转解析为参数,并以参数形式传递给后续命令。
xargs是extended arguments(扩展参数)的缩写,Unix/Linux 的命令行参数长度有限制(由 ARG_MAX 决定),一次性传递大量参数可能导致命令错误,xargs 的诞生就是为了拆分长参数列表,分批执行命令,避免这个问题。xargs命令语法为:
xargs [选项] [命令]
- 当不为xargs指定命令时,默认为echo
- -n 值:每次执行命令时使用的最大参数数量(当上一个命令输出太多时,用来分批处理)
- -r 如果输入为空,则不执行命令
- -I {}:使用{}作为占位符,方便后续命令中自由插入xargs所解析出来的参数(该占位符可自定义,如 -I @)
- -d 分隔符:指定输入的分隔符(默认是空格和换行)
- -p 交互式提示用户确认是否执行命令
- -P 值:并行执行多个命令
- -t 打印要执行的命令(调试用)
- -0 处理带空格的输入(通常与 find -print0 配合使用)
1.rm、mv等命令需要参数,而无法直接使用来自stdin的数据作为参数
find . -name "*.log" | xargs rm -f
2.使用-I指定占位符方便自由使用匹配到的数据
find . -name "*.txt" | xargs -I {} mv {} /backup/
3.批量处理带空格的文件名
find . -name "*.txt" -print0 | xargs -0 rm
4.控制每次执行的参数数量
seq 1 10 | xargs -n 3 echo
5.使用-P 并行执行多个命令
在文件中指定多个下载地址,每次传递1个参数给curl,同时运行多个curl
cat urls.txt | xargs -n 1 -P 4 curl -O
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