2016-10-11 4 views
-3

Я ищу для создания монитора и нуждаюсь в некоторой помощи по приведенному ниже фрагменту кода. У меня возникла ошибка в инструкции if. Мне нужен взгляд, чтобы проверить последний параметр каждой строки файла и сравнить его с 85 и эхом, означающим полный вывод.Условия оболочки внутри, если оператор

while read line; 
do 
if [$(cat $line | awk -F':' '{print $5}') -gt 85] 
echo "Rootfile system on host $1 has reached $5 percentage" 
fi 
echo $line 
done </home/monitor1.txt 

Мой выходной файл выглядит, как показано ниже:

host1:45G:10G:35G:34 
host2:45G:15G:30G:41 
host3:45G:5G:40G:12 
host4:45G:5G:40G:11 
+0

Обратите внимание на [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

+1

Это может помочь: http://stackoverflow.com/q/9581064/3776858 – Cyrus

+1

Пожалуйста, попробуйте http://shellcheck.net/ перед тем, как обратиться за помощью для проверки прав человека. – tripleee

ответ

2

Вам необходимо пространство (ы) после [ команды и до закрытия аргумента ], а также then после ]:

if [ "$(awk -F':' '{print $5}' <<<"$line")" -gt 85 ]; then 
    echo ... 
fi 

или

if [ "$(awk -F':' '{print $5}' <<<"$line")" -gt 85 ] 
then 
    echo ... 
fi 

Также вы читаете строку, а не файл, поэтому cat здесь используется неправильно, либо используйте echo, либо здесь строку. Также цитируйте свои расширения переменных, чтобы избежать разделения слов и расширения пути. Кроме того, вы можете включить всю логику внутри awk, без необходимости помощи оболочки.

+0

OP также должен указывать переменную, избегать [бесполезного 'cat'] (http://www.iki.fi/era/unix/award.html) и, возможно, полностью выполнять логику в Awk или полностью вне Awk. 'awk '$ 5> 85 {print" Корневая файловая система на "$ 1" достигла "$ 5"% "}'/home/monitor1.txt' – tripleee

+0

@tripleee Отредактировано. – heemayl

+0

Спасибо, это решило мою проблему. – Bigboss

Смежные вопросы