Добавление исключений во время вырезания возвращает нежелательные результаты - PullRequest
0 голосов
/ 28 июня 2018

У меня есть файл, который генерируется (что-то вроде файла аудита), с которым был получен доступ к указанному файлу. Выглядит следующим образом:

image

Мне нужно написать тревожную систему, которая входит в указанный отчет и проверяет всех пользователей. однако bash по какой-то причине интерпретирует «------» как ввод.

for i in $(cut -c 8-13 report_file.csv)
do
if [[ $i -eq 'suser' ]] || [[ $i -eq '--------' ]] || [[ $i -eq 'login' ]] || $i -eq 'root']] 
then 
break
else 
echo "email text"+ $i | mailx -s "email subject" $EMAILS_LIST
done 

вывод для этого:

. / Script_name.sh: строка 26: [[: --------: синтаксическая ошибка: операнд ожидается (токен ошибки "-")

Так что, как я понимаю, он принимает исключение "------" и по-прежнему видит его как входные данные.

Итак, что мне не хватает?

1 Ответ

0 голосов
/ 28 июня 2018

-eq в тесте (то же самое в расширенном тесте [[...]] ) - оператор для целых чисел. '---------' не является целым числом. Используйте = для сравнения строк.

... [[ "$i" = 'suser' ]] || [[ "$i" = '--------' ]] || [[ "$i" = 'login' ]] || [[ "$i" = 'root' ]]

или проще

... [[ "$i" = 'suser' || "$i" = '--------' || "$i" = 'login' || "$i" = 'root' ]]

или проще:

case "$i" in 
suser|--------|login|root) ;; 
*) echo "email text"+ $i | mailx -s "email subject" $EMAILS_LIST; ;;
esac

Примечание:
Чтение строк из файла с использованием for i in $(...) это плохо . Лучше использовать while read -r line; do .... done < <(cut -c 8-13 report_file.csv) или cut -c 8-13 report_file.csv | while read -r line; do ... done см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...