Помогите с сценарием Bash - PullRequest
       41

Помогите с сценарием Bash

0 голосов
/ 23 февраля 2010

Я пытаюсь заставить этот скрипт в основном читать входные данные из файла в командной строке, сопоставлять идентификатор пользователя в файле, используя grep, и выводить эти строки с номерами строк, начинающимися с 1) ... n в новом файл.

пока мой скрипт выглядит так

#!/bin/bash
linenum=1
grep $USER $1 |
while [ read LINE ]
do
echo $linenum ")" $LINE >> usrout
$linenum+=1
done

когда я запускаю его ./username file я получаю

line 4: [: read: unary operator expected

Может кто-нибудь объяснить мне проблему?

спасибо

Ответы [ 6 ]

3 голосов
/ 23 февраля 2010

Как насчет следующего?

$ grep $USER file | cat -n >usrout
3 голосов
/ 23 февраля 2010

Просто удалите [] вокруг read line - они должны использоваться для выполнения тестов (файл существует, строка пуста и т. Д.).

1 голос
/ 23 февраля 2010

просто используйте awk

awk -vu="$USER" '$0~u{print ++d") "$0}' file

или

grep  $USER file |nl

или с оболочкой, (не нужно использовать grep)

i=1
while read -r line
do
 case "$line" in
  *"$USER"*) echo $((i++)) $line >> newfile;;
 esac
done <"file"
1 голос
/ 23 февраля 2010

Оставьте квадратные скобки.

while read line; do
  echo $linenum ")" $LINE
done >> usrout
0 голосов
/ 24 февраля 2010

Кроме того, вместо $foo+=1 вы должны написать foo=$(($foo+1)).

0 голосов
/ 24 февраля 2010

Почему бы просто не использовать grep с переключателем -n (или - номер строки )?

$ grep -n ${USERNAME} ${FILE}

Переключатель -n дает номер строки, по которой найдено совпадение в файле. Со страницы руководства grep:

-n, --line-number
      Prefix  each  line of output with the 1-based line number
      within its input file.

Итак, запуск этого файла с / etc / passwd в linux для пользователя test_user дает:

31:test_user:x:5000:5000:Test User,,,:/home/test_user:/bin/bash

Это показывает, что учетная запись test_user появляется в строке 31 файла / etc / passwd.

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