我是UNIX的新手,无法弄清楚如何从文件中访问某个数字。以下是我输入配额-v时得到的结果。
我需要编写一个脚本来检查并确保我是否处于配额范围内,如果没有显示警告消息。所以,我想从该文件中访问“使用”号和“限制”号,并使用“if”语句进行比较。有人可以告诉我如何访问该特定位置的数据。 (例如:“使用”区域中的205539和该文件中“限制”区域中的200000)。任何帮助将不胜感激。
答案 0 :(得分:3)
在UNIX shell中,习惯上使用执行非常小任务的小工具,并将它们组合起来组装anwser。基础系统为您提供了各种各样的工具,可以对文本进行各种基本操作。 例如,您可以像这样运行配额:
quota | grep undergrad1
哪个会运行配额,并将其输出传递给grep,如果它们包含其参数,则返回行。这将只返回undergrad1行。 然后,您可以将该行提供给将其破解为列的工具。这样做的主要工具称为 cut 。 Cut采用分隔符和字段规范 - 或者字符计数。 在您的情况下,您可能希望在将其传递给cut之前清洗grep的输出,以免依赖于字符数。如果配额使用制表符来分隔列,那么您可以按原样将其剪切:
quota | grep undergrad1 | cut -d "\t" -f 3
...但是如果它使用可变数量的空格,那么您可能希望先将它们折叠成一个 tr 及其-s选项:
quota | grep undergrad1 | tr -s " " | cut -d " " -f 3
请注意,我们现在要求剪切使用空格而不是制表符作为分隔符。
有了这个,您应该能够组装一个能够满足您需求的脚本。更进一步,您可以在第一行grep“Filesystem”并尝试在返回它们之前找出列索引,如果您希望在名称相同但顺序不同的系统上运行,或者任何适合范围的你的剧本。
答案 1 :(得分:2)
我建议你使用quota -q,如果在你的系统上可用的话:
-q, --quiet
Print a more terse message, containing only information on
filesystems where usage is over quota.
...然后你可以grep找到你感兴趣的文件系统。
像这样:
quota -q | grep undergrad4
从脚本中检查grep返回状态应该很容易(0 =找到匹配的行,1 =没有匹配的行)
答案 2 :(得分:2)
var=$(quote -v | awk '$2>$4{ print "5"}')
echo "$var"
答案 3 :(得分:0)
利用awk
获取这些特定列的字段。一个简单的shell脚本应该能够帮助你处理条件。