在bash中内联if else语句

时间:2016-12-21 17:32:18

标签: linux bash awk

我运行以下代码

iostat -x 1 2 | sed 's/,/./g' | awk '/^avg-cpu/        {c++; a=2} 
                c==2 && a && !--a {printf ("%s,%s,%s,", $1, $3, $4)} 
                c==2 && /^sda/    {printf ("%s,", $14)}
                c==2 && /^sdb/    {printf ("%s,", $14)}
                c==2 && /^nvme0n1/    {printf ("%s,",$14)}'

以获取cpu和disk i / o的值。我现在要做的是检查是否有nvm磁盘。如果有打印,则其实用程序打印-1.00。

我试过

if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1.00}'

我正在

awk: cmd. line:5:                        if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1}
awk: cmd. line:5:                        ^ syntax error
awk: cmd. line:5:                        if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1}
awk: cmd. line:5:                                                ^ syntax error
awk: cmd. line:5:                        if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1}
awk: cmd. line:5:                                                                             ^ syntax error

c==2 && !/^nvme0n1/ {printf ("%s,",1.00)}'

这给了我不止一个1.00,我猜每次1.00都找不到它。

不幸的是,我没有得到ShellCheck的帮助 enter image description here

1 个答案:

答案 0 :(得分:1)

听起来您正试图获得磁盘吞吐量利用率,)}无法使用-1

awk是它自己独立的脚本语言,您不能在其中使用任何awk语法。

但主要问题是,在您阅读完所有行之前,无法确定您是否找到了自己的号码。处理完所有行后,您可以确定是打印数字还是bash。您可以使用awk的特殊-1块。此代码还使用特殊END块来设置默认值:

BEGIN