2014-08-29 2 views
0

Im пытается сделать скрипт, который принимает .txt файл, содержащий строки как:ш случайная ошибка при сохранении функции выхода

davda103:David:Davidsson:800104-1234:TNCCC_1:TDDB46 TDDB80: 

, а затем сортировать их и т.д. Вот только фон моя проблема лежит здесь:

#!/bin/sh -x 
cat $1 | 
while read a 
do 

testsak = `echo $a | cut -f 1 -d :`; <---** 

echo $testsak; 

done 

Где стрелка, когда я пытаюсь запустить этот код, я получаю какую-то странную ошибку.

+ read a 
+ cut -f+ echo 1 -d :davda103:David:Davidsson:800104-1234:TNCCC_1:TDDB46 
TDDB80: 
+ testsak = davda103 
scriptTest.sh: testsak: Det går inte att hitta 
+ echo 

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

+0

Вы можете иметь сообщения на английском языке, установив 'LANG = C' перед запуском вашего скрипта ('LANG = C./yourscript.sh'). – WilQu

+1

Вы должны использовать '$ (...)' для своей подкоманды [Почему $ (...) предпочитается над '...' (backticks)?] (Http://mywiki.wooledge.org/BashFAQ/082) –

+0

В бескорыстном переводе он говорит: «Команда не найдена» (ссылаясь на «testak»). – chepner

ответ

4

У вас есть лишние пробелы вокруг оператора присваивания, удалите их:

testsak=`echo $a | cut -f 1 -d :`; <---** 
0

Пространства вокруг знака равенства

testsak = `echo $a | cut -f 1 -d :`; <---** 

причины bash интерпретировать это как команду testak с аргументами = а результат подстановки команды. Удаление пробелов устраняет немедленную ошибку.

Гораздо более эффективный способ извлечения значения из a это позволить read это сделать (и использовать перенаправление ввода вместо cat):

while IFS=: read testak the_rest; do 
    echo $testak 
done < "$1" 
Смежные вопросы