2010-10-13 58 views
1

我是UNIX新手,无法弄清楚如何从文件中访问某个数字。以下是我输入配额-v时得到的结果。 alt text如何在UNIX中读取值

我需要编写一个脚本来检查并确认我是否在配额下,如果不显示警告消息。所以,我想从该文件中访问“使用”数字和“限制”数字,并使用'if'语句来进行比较。有人可以告诉我如何访问该特定位置的数据。 (例如:“使用”区域中的205539和该文件中“限制”区域中的200000)。任何帮助将不胜感激。

回答

2
var=$(quote -v | awk '$2>$4{ print "5"}') 
echo "$var" 
+0

谢谢,该代码完美的作品。我想知道,如果条件($ 2> $ 4)是真的,我想使变量x = 5。我怎样才能做到这一点?它与quote -v |类似吗? awk'$ 2> $ 4 {print“warning”,x = 5}' – HelloWorld 2010-10-13 09:23:40

+1

我不确定你想要用变量x做什么。所以我猜你想要返回到shell。因此,将整个命令分配给一个变量。请参阅编辑 – ghostdog74 2010-10-13 09:43:05

+0

当我使用您在家中提供的代码时,它可以在我的ubuntu机器上正常工作。但是当我在香蕉学校运行时,它给了我以下错误。 emfile:第21行语法错误:'var = $'unexpected。你能否告诉我是否有其他写作方法。所以我可以通过var – 2010-10-14 01:56:33

0

利用awk获取这些特定列的字段。一个简单的shell脚本应该能够帮助你的条件。

2

我建议你使用配额-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 =没有匹配的线)

+0

非常感谢您的详细解释。但配额-q在我的系统中不可用。 – HelloWorld 2010-10-13 09:25:21

3

在UNIX shell中,通常使用执行非常小任务的小工具,并将它们组合起来组装安装程序。基本系统为您提供各种工具,可以对文本进行各种基本操作。 例如,你可以这样运行了配额:

quota | grep undergrad1 

这将运行配额,并将其输出传递到grep的,他们的工作是返回行,如果它们包含它的参数。这将只返回undergrad1行。 然后,您可以将该行添加到可将其分解为列的工具。这样做的主要工具被称为cut。 Cut采用分隔符和字段说明 - 或者字符计数。 在你的情况下,你可能需要先清理grep的输出,然后再传递给它,以便不依赖于字符数。如果配额使用标签来分隔列,那么你可以喂,要削减的是:

quota | grep undergrad1 | cut -d "\t" -f 3 

...但如果它使用可变数量的空格,则可能需要首先将其折叠成一个与TR及其-s选项:

quota | grep undergrad1 | tr -s " " | cut -d " " -f 3 

请注意,我们现在问切使用空间,而不是标签,作为分隔符。

有了这个,你应该可以组装一个你想要的脚本。进一步说,如果您希望在名称相同但顺序不同的系统上运行,或者在任何符合范围的情况下运行,则可以在第一行grep“Filesystem”并尝试在返回它们之前找出列索引。你的脚本。

+0

感谢您的详细解释。这是非常有帮助 – HelloWorld 2010-10-13 09:20:53