импорт данных от текстового файла до сценария удара

usrmodx() { sudo usermod "$1" -l "$2" -md "$2"; }
usrmodx durrantm_test durrantm_test2

Но не был должен это быть,

sudo usermod -l new_name -md new_dir old_name

так

sudo usermod -l durrantm_test2 -md durrantm_test2 durrantm_test

и как функция,

moveuser() { sudo usermod -l "$2" -md "$2" "$1"; }
moveuser durrantm_test durrantm_test2

или я пропускаю что-то?

Это предполагает использование оболочки, которая поддерживает функции (например, удар) и избегает псевдонимов, потому что Вы не можете использовать позиционные переменные.

3
26.08.2013, 14:50
3 ответа

Вы пытаетесь считать каждую строку как символ?

Имейте эти 25 записей быть в файле под названием stocks.txt. Затем используйте следующий сценарий, чтобы выполнить итерации по каждой строке в файле запасов и обработать символ с помощью функции запаса, объявленной в том же сценарии:

while read symbol ; do 
  stock $symbol >> /home/user/Desktop/stockquote.txt 
done < stocks.txt
2
27.01.2020, 21:23
  • 1
    Вы почти наверняка хотите к любому использованию >> или переместите stdout перенаправление за пределами цикла (я пошел бы для опции 2). И ($symbol) вызовет ошибку удара; я думаю, что Вы хотите избавиться от круглых скобок. –  rici 25.08.2013, 08:19
  • 2
    Спасибо за комментарий. Я отразил Ваши предложения в своем ответе. –  neowulf33 26.08.2013, 05:43

По-видимому, заголовок и тело вопроса не казались вполне тем же мне. Вот два решения:

Импорт данных из внешнего файла в сценарий Bash:

Считайте файл и сохраните его содержание как записи в массиве. (Отметьте: это выполнимо, учитывая содержание Вашего текстового файла. Если бы, для, например, какая-либо строка в файле имела несколько слов без цитат, то массив так сформированный не был бы так желаем.)

declare -a symbols=($(cat input_file.txt | tr '\n' ' '))

Теперь, выполните итерации по объектам массива symbols следующим образом.

LOG_FILE=/home/user/Desktop/stockquote.txt    

for symbol in ${symbols[@]}  
do  
    # echo "Processing $symbol ..."  
    sh stock "$symbol" >> "$LOG_FILE"    
done

На самом деле можно встроить это в сценарий, названный самим запасом. Просто изменитесь sh stock "$symbol" выше к чему-то вроде этого:

f_process "$symbol" >> "$LOG_FILE"    

где f_process возможно функция, обрабатывающая символ. Если Вы не хотите писать функцию, просто поместите соответствующие строки кода там.

Передающие данные из внешнего файла как аргументы сценарию оболочки:

Связанное решение было уже отправлено neowulf33. Просто воспроизвожу это с исправлениями:

LOG_FILE=/home/user/Desktop/stockquote.txt 
while read symbol    
do  
    stock "$symbol" >> "$LOG_FILE"
done < input_file.txt
1
27.01.2020, 21:23
  • 1
    здесь - то, на что я изменил его, я знаю не правильный как не работа; #!/bin/bash объявляют-a символы =($ (кошка /home/user/Desktop/file5.txt | TR '\n' '')) для символа в $ {символы} # повторяют "$symbol Обработки..." sh запас "$symbol">> "$LOG_FILE" {рысь - дамп "google.com/finance? $ client=ob&q= {1}" | sed 's/.* ']'//' | жемчуг-00ne "печатает, если / Наблюдают этот stock/i" | sed 's/Watch этот запас//' | sed 's/Disclaimer//' | sed '/^ $/d' | sed 's/Currency в долларе США//' | LOG_FILE=/home/user/Desktop/stockquote.txt}/bin/bash/home/user/Desktop/quoteparse h –  user177073 25.08.2013, 18:45
  • 2
    также, когда я запускаю скрипт, я получаю эту ошибку: stock2 stock2 sh: 2: stock2: Синтаксическая ошибка: "(" неожиданный, поскольку это не делает ни одного управления файлом, я предполагаю его остановку первую фигурную скобку" (" в сценарии. –  user177073 25.08.2013, 18:52
  • 3
    Код, вставляемый в комментарии ранее, кажется, не значим. Кроме того, массивы не работали бы с sh - удар использования вместо этого. –  Barun 25.08.2013, 20:17
  • 4
    , Вот то, что я придумал до сих пор:>/bin/bash #!/bin/bash # СЦЕНАРИЙ: ЦЕЛЬ METHOD1.SH #: Обработайте файл линию за линией с ПЕРЕДАННЫМ ПО КАНАЛУ, в то время как - считал цикл. $ FILENAME= /home/user/Desktop/file5.txt count=0$FILENAME кошки |, в то время как считанная СТРОКА делают $LINE запаса мусорного ведра/удара |> /home/user/Desktop/$Line.txt, позволяют количеству ++ повторить “$count$LINE” сделанное чтение строк-e “\\nTotal $count эха”, в то время как считано-r строка; коснитесь "$line" ||, эхо "Не могло создать \"$Line \"" &&, выходят из 27 сделанных </home/user/Desktop/file5.txt, Поскольку Вы видите, что это - мэшап предложений, отправленных здесь, но это не работает, никакие идеи? –  user177073 30.08.2013, 23:45
  • 5
    Если не была некоторая ошибка ввода при регистрации кода в вышеупомянутом комментарии, это содержит несколько ошибок. Исправленные строки - 1) FILENAME=/home/barun/Desktop/file5.txt 2) /bin/bash stock $LINE > /home/barun/Desktop/$Line.txt –  Barun 31.08.2013, 09:16

Если Вы хотите циклично выполниться по строкам файла, можно использовать read встроенный в цикле как это:

while IFS= read -r line; do
  echo "$line"
done <input_file.txt

Содержание строки хранится в переменной line (можно выбрать любое другое имя). Посмотрите Понимание IFS для большего количества объяснений. Без IFS=, продвижение или запаздывающий пробел разделяются, который может быть желательным в Вашем случае.

Остерегайтесь этого >stockquote.txt усекает выходной файл каждый раз. Или помещенный это вокруг целой команды или использование >>stockquote.txt который добавляет в файл. Если Вы используете >>, заботьтесь, что файл не может быть пустым, когда Ваш сценарий запускается.

Этот отрывок запускает программу stock для каждой строки и хранилищ вывод в stockquote.txt с пустой строкой (echo без аргумента) между каждым символом.

while read -r line; do
  stock "$line"
  echo
done <input_file.txt >stockquote.txt

Удостоверьтесь это stock исполняемый файл. Если это - сценарий оболочки, удостоверьтесь, что это начинается #!/bin/sh. Если это не находится в пути поиска команды $PATH, укажите путь явно (например. ./stock если это находится в текущем каталоге).

Можно также использовать xargs, но остерегайтесь, тот его входной синтаксис является странным: это не использует новые строки в качестве разделителей, но пробел и обработки \'" как заключение в кавычки символов (с входным синтаксисом по умолчанию — просто ко всем неприятностям, xargs имеет альтернативные входные синтаксисы в зависимости от своих параметров командной строки). Для Вашего варианта использования это, вероятно, подходит также, и это короче, но Вы теряете возможность иметь пробельные символы или символы кавычки в символах, пропустить строки комментария, и т.д.

xargs -n 1 stock <input_file.txt >stockquote.txt
0
27.01.2020, 21:23

Теги

Похожие вопросы