grep "::=BEGIN" -q < /home/erawson/bin/HP/adaptec.mib
CHK= echo $?
if ($CHK = "0") ; then
echo "failed"
else
exit
fi
ошибка:
/home/erawson/bin/try1: line 10: =: command not found
решение1
измените оператор if на if [ $CHK -eq 0 ]; then
. Обратите внимание на пробелы между квадратными скобками.
Переменная CHK также должна быть назначена следующим образом CHK=$(echo $?)
.
Вот как должен выглядеть скрипт:
#!/bin/bash
grep "::=BEGIN" -q < testfile1.txt
CHK="$?"
if [ "$CHK" -eq 0 ] ; then
echo "failed"
else
exit
fi
решение2
У вас там есть несколько ошибок синтаксиса, как уже было указано. Вы также, кажется, используете некорректную логику. Статус выхода означает, что 0
команда выполнена успешно, а не то, что она не удалась. Если вы хотите напечатать, failed
если ваш файлне делаетсопоставьте строку запроса, все, что вам нужно, это:
grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib || echo "failed"
Если вы хотите распечатать failed
файлМатчистроку, используйте это:
grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib && echo "failed"
Нет необходимости сохранять статус выхода и нет необходимости в проверке if/else.
решение3
Насколько я понимаю, ваше требование заключается в том, что если вы получаете вывод для grepping строки "::=BEGIN", вы хотите вывести "failed".. верно?? И я не уверен, почему вы использовали ";" после if... снова использовали "then"
вы можете попробовать следующее
if [ -n `grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib` ]
then
echo "failed"
else
exit
fi
Надеюсь, это поможет!! (по моим предположениям)
решение4
Вам просто нужна дополнительная пара скобок:
grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib
if (("$?" = "0")); then
echo "failed"
else
exit
fi
Правильный синтаксис арифметического оператора:
((
Кроме того, поскольку вы используете только код выхода
$?
, нет необходимости сохранять его в другой переменной, вы можете использовать его напрямую.
Это можно еще упростить следующим образом:
if grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib; then
echo "failed"
else
exit
fi