Linux:实现将参数传递到下一个指令中部进行执行

本文最后更新于:2024年5月4日 凌晨

1、方法一

使用awkxargs来实现参数传递:这种方法需要xargs支持-I参数,不支持的情况下执行结果不会替换掉{}

1
ps aux | grep <your_process_name> | awk '{print $2}' | xargs -I {} echo "Process ID: {}"

这里,-I {} 选项告诉 xargs 在每次执行 echo 命令时用找到的进程ID替换 {}

通过xargs --help来判断是否支持-I参数,我这里不支持-I参数,考虑其他方法:

image-20240219094019874

2、方法二

使用管道和循环来替代xargs以达到相同的执行效果,示例:

1
ps aux | grep <your_process_name> | awk '{print $2}' | while read pid; do echo "Process ID: $pid"; done

这个命令会逐行读取 awk 命令输出的进程ID,并把它传递给 echo 命令以生成所需的输出。

执行结果示例:

1
2
3
# ps -ef | grep com.ghtc.ghtlog | awk '{print $2}' | while read pid; do echo "Process ID: $pid"; done
Process ID: 3588
Process ID: 30941

3、用法拓展

通过上述的方法,可以有很多种使用技巧,如将前一个指令执行的结果进行换算处理。

  • 这里查询出的结果为:
1
2
cat /sys/kernel/debug/clk/measure_only_mccc_clk/clk_measure
>>> 1555209953
  • 换算的过程处理指令为:
1
2
# 输出结果为Byte,按单位换算为MB:
echo "scale=2; 1555209953 / 1024 / 1024" | bc
  • 将查询和数据换算过程正和岛一条指令:

通过awk和循环控制语句来实现。

1
cat /sys/kernel/debug/clk/measure_only_mccc_clk/clk_measure | awk '{print $1}' | while read result; do echo "scale=2; $result / 1024 / 1024" | bc;done

执行结果:

1
>>> 1483.16
  • 上面的结果不会有单位输出,追加单位输出如下:
1
cat /sys/kernel/debug/clk/measure_only_mccc_clk/clk_measure | awk '{print $1}' | while read result; do echo "$(echo "scale=2; $result / 1024 / 1024" | bc) MB"; done

执行结果:

1
>>> 1483.16 MB

Byte转换成GB:

1
cat /sys/kernel/debug/clk/measure_only_mccc_clk/clk_measure | awk '{print $1}' | while read result; do echo "$(echo "scale=2; $result / 1024 / 1024 /1024" | bc) GB"; done

执行结果:

1
>>> 1.44 GB

其他的使用技巧,简化执行的步骤,尽情的发挥想象吧。

4、命令拓展——bc:数字计算器

bc指令,全称为binary calculator,译为二进制计算器,主要用来进行浮点数的计算。在bash中,仅支持整数的运算,不支持浮点数的运算,通过bc指令来实现对浮点数的运算。

4.1、bc参数介绍

bc --help可以查看支持哪些参数:

image-20240219174935590

1
2
3
4
5
6
7
8
9
10
11
-i --interactive 强制进入交互模式
-l --mathlib 使用预定义的数学函数:
s(expr) = 表示 expr 弧度的正弦值
c(expr) = 表示 expr 弧度的余弦值
a(expr) = 表示 expr 的反正切值(返回弧度)
l(expr) = 表示 expr 的自然对数
e(expr) = 对 expr 进行 e 的幂运算
j(n, x) = x 的整数阶贝塞尔函数 n
-q --quiet 不打印版本和版权信息
-s --standard 如果使用了任何非 POSIX 扩展,则报错
-w --warn 如果使用了任何非 POSIX 扩展,则警告

4.2、交互模式运算

正常执行bc指令或bc -i会进入一个交互模式,相当于进入了计算器的输入界面:

1
2
bc
bc -i

image-20240219173104259

在交互模式下可以执行各类运算操作(加减乘除等):

image-20240219173523985

输入quit退出交互模式。

4.3、作为计算工具,处理数据

通过echobc组合使用,将输出的结果作为计算参数来使用,如:

1
2
3
4
5
6
# 除运算
echo 100 / 5 | bc
>>> 20
# 求算术平方根
echo 9 | bc -lq | awk '{print sqrt($1)}'
>>> 3

4.4、设置小数点规模

  • 交互模式中设置小数点规模
1
2
3
4
5
bc
# 设置2位小数点
scale=2
9/3
>>> 3.00

image-20240219175814072

  • 在指令执行中设置小数点
1
2
3
# 设置3位小数点
echo "scale=3; 9 / 3" | bc
>>> 3.000

Linux:实现将参数传递到下一个指令中部进行执行
http://www.codestar.top/2024/02/19/Linux/Linux:实现将参数传递到下一个指令中部进行执行/
作者
mini小新
发布于
2024年2月19日
更新于
2024年5月4日
许可协议