在我脑海中试图解析这个问题时遇到了一点麻烦。我在korn shell中创建一个脚本来查找文件系统是否至少有5GB。如果它没有5GB,我希望脚本出错。
我找到可用空间的代码是
config.json
我在CultureInfo ci = new CultureInfo("es-ES", false);
string date = DateTime.Now.ToString("MMMM dd REPLACE yyyy", ci).Replace("REPLACE", "de");
语句中使用它,如
string.Replace
我得到的错误是
df -g /u00 | sed -n '2p' | awk '{print $3}'
显然,我并不喜欢把if
置于其中的地方,我认为这是因为我试图将它与{{{{{{{{{{{{{{{{ 1}}。问题是,我不确定如何将它写到if df -g /u00 | sed -n '2p' | awk '{print $3}' -lt "5.00";
then
#There's less than 5gb
echo "There's less than 5GB, please clear up space to continue"
exit 1
else
echo "Enough space, continuing"
fi
语句旁边不会呛到的地方。是否有更好的方法进行比较,或者我是否错误地将其传递给awk: 0602-533 Cannot find or open file -lt.
The source line number is 1.
Enough space, continuing
?
我也尝试将其作为变量传递,如
-lt
它似乎也不喜欢
答案 0 :(得分:1)
使用和How to select a particular column in linux df command我会说:
df --output=avail /u00
因为输出类似于
Avail
299344672
,你总是想要最后一行。为此,我们可以使用awk
中使用END
的技巧。该块在读取文件后执行,但它存储了读取的最后一行,因此它是这种情况的完美解决方案。
在那里,我们执行field > 5GB
的逻辑(注意我通过说5 * 1024 ^ 3获得值)。如果发生这种情况,我们会打印1
;否则,没有打印出来:
df ... | awk 'END {if ($1 > 1024*1024*1024*5) print 1}')
总之,可以使用if [ -n "$value" ]
条件检查,检查$value
是否为空:
if [ -n "$(df --output=avail . | awk 'END {if ($1 > 1024*1024*1024*5) print 1}')" ]; then
echo "bigger"
fi
来自man test
:
-n STRING
the length of STRING is nonzero
关于您的解决方案: export AWK = df -g / u00 | sed -n'2p'| awk'{print $ 3}' 如果[$ AWK -lt“5.00”];
这不起作用,因为语法为var=$(command)
。此外,if
条件的语法是if [ ... ]
;也就是说,您需要[
周围的空格。
所有在一起:
export AWK=$(df -g /u00 | sed -n '2p' | awk '{print $3}')
if [ "$AWK" -lt "5.00"];
答案 1 :(得分:0)
无论出于何种原因,我的AIX 6和AIX 7盒子上的df版本非常有限,并且无法识别很多预期的字段,如--output和-m。另外,-g的输出不是非常友好的。
我最终使用它来确定使用的空间百分比。如果我想计算可用空间,则存在可提供该信息的其他列,但可用百分比符合我的需求。
df -v /backup | grep "/"|awk '{print $6}'
df -v
包含以下列,我认为可以简化上述答案中的awk命令,如下所示:
df -v /backup | grep "/"|awk '{if ($5 > 1024*1024*1024*5) print $5}'
这可能只有在我拥有df
的版本时才有效。我试着运行df -v
来弄清楚它是什么,但后来我意识到这只是给了我已经看过的东西。 :-)
答案 2 :(得分:0)
-lt
没有做到你预期的原因是它只对[
命令有意义。它不是一个可以在shell命令中的任何位置使用的关键字。
如果您想与-lt
进行比较,则需要以[ "THING1" -lt "THING2" ]
格式撰写,其中THING1
和THING2
是两个数字比较。 (双引号确保THING1
和THING2
不会被分解为单独的单词,即使您犯了一些错误并且意外地包含了非数字字符。)如果您想使用输出awk在这个比较中,使用命令susbtitution。
if [ "$(df -g /u00 | sed -n '2p' | awk '{print $3}')" -lt 5 ]; then …
请注意,您只能使用整数,而不能使用浮点数。 (如果你使用ksh,那可能不是真的,我不确定AIX的ksh版本是什么。)
但awk可以轻松进行数值比较,因此让它进行比较会更简单。使用exit
函数从awk返回所选状态;注意awk使用0表示false,非零表示true,但shell使用0表示成功,非零表示失败。 Awk也可以进行整个数据提取,此外不需要使用sed。此外,要从df
获取可以(通常)可靠且可移植的方式解析的输出,请使用-P
选项。
if df -P -k /u00 | awk 'NR==2 {exit !($4 < 5*1024*1024)}'; then
echo "Less than 5GB available"
fi