2015-06-17 3 views
0

Мне нужно сохранить список писем в скрипте оболочки. Этот скрипт будет вызван и передан номер клиента. в зависимости от номера клиента Я хочу заполнить переменную на основе пройденного номера клиента.Хранение данных в оболочке

Я не уверен, как это осуществить и вы искали.

пример команды

gcb "type" "customernumber" "date" 

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

@shellter

Так как вы можете видеть выше, моя команда имеет номер клиента, как $ 2, я пытаюсь получить электронный видоискатель, чтобы работать с этим в виду. Поэтому я создал скрипт для проверки функции поиска по электронной почте. Он отлично работает, как и у вас, но если я хочу, чтобы он искал $ 2 == cust_id, он ничего не возвращает. Вот мой код ниже.

#!/bin/sh 
#case $# in 0) echo "usage: myEmailFinder2 CustID" ; exit 1 ;; esac 
cfgDir="/verification" 

# given cust file like 
# cust_id "\t" email_addr 
fn_myEmailFinder() { 
     awk -F"\t" -v cust_id="$2" '{if ($2 == cust_id) {print $3}}'  /verification/custlist.cfg 
     } 


emailAddr=$(fn_myEmailFinder "$1") 
echo $emailAddr 

Команда Я бегу, чтобы проверить это это

sh emailtest.sh test 90624 

Мой конфигурационный файл изложил, как это, табуляцией

CustomerNumber CustomerName Email 

Я буду хранить больше данных в этом файл, чтобы заполнить другие переменные, я уверен, что как только я это выясню, я могу разобраться в других данных.

Я ценю всю вашу помощь.

+4

Существует гаджет, называемый «базой данных», который хорош для хранения данных. Это лучше, чем пытаться хранить данные в скрипте различными способами, не в последнюю очередь из того, что данные могут поддерживаться отдельно от сценария и повторно использоваться другими приложениями - ни одно из которых не является возможным (или легко возможным), если вы храните данные в сценарии оболочки. Также похоже, что вы хотите хранить в сценарии адреса электронной почты, а не электронные письма. Разница заключается в размере хранимых объектов и форматировании. –

+2

Если вы собираетесь написать сценарий, покажите нам свой код. Если вам нужна рекомендация для готового программного обеспечения, есть сайт программных рекомендаций по stackexchange. –

+2

Большинство вещей возможны с помощью сценариев оболочки, но ... хранение данных в скрипте не считается чем-то подходящим для производственных сред. Риск изменения скрипта увеличивается каждый раз, когда вам приходится редактировать сценарий для изменения данных. Если вы действительно хотите, посмотрите на «grep» $ uid »<< EOF line1^Jline2^Jline3^EOF' Вам нужно будет узнать о документах« ЗДЕСЬ »(представленный здесь« << EOF »здесь) и понимаем, что '^ J' является символом строки' \ n', который создает отдельные строки в файле. ** Затем ** вам нужно будет сделать макет записи для извлечения поля, которое вам нужно. Удачи. – shellter

ответ

0

Этот скрипт будет вызван и передан номер клиента.

myEmailFinder "$CustID" 

Я хочу, чтобы заполнить переменную основанную на помещённой в номер клиента.

emailAddr=$(myEmailFinder "$CustID") 

Я хочу, чтобы тянуть электронной почты, связанный с этим номером клиента и заполнить переменную с ней.

Я бы предпочел, чтобы это хранилось в сценарии, а не в отдельном файле, если это возможно.

Использование базы данных является предпочтительным, но ....в вашей письменной спецификации, попробуйте это

cat myEmailFinder 
#!/bin/bash 
case $# in 0) echo "usage: myEmailFinder CustID" ; exit 1 ;; esac 

# given cust file like 
# cust_id "\t" email_addr 
fn_myEmailFinder() { 
    awk -F"\t" -v cust_id="$1" '{ 
     if ($1 == cust_id) { 
       print $2 
     } 
     }' <<-EOF 
      1  [email protected] 
      2  [email protected] 
      5  [email protected] 
     EOF 
     #--^tabCh^---make sure you put a real tab char between custID and emailAddr 
    #tabCh-TabCh--- data indented with TabChars. EOS indented with **only** tabCh. 

#send an email to cust in $1 
emailAddr=$(fn_myEmailFinder "$1") 
mailx -S "Test Email" "$emailAddr" <<-EOM 
    Here is the body of an email addressed to $emailAddr with CustID=$custID 
EOM 

#end of script 

Блок разграничены EOF является местом для хранения CustID и связанные с ним адреса электронной почты. Один на строку, с разделителями табуляции. Отступы на каждой строке должны выполняться с помощью символов табуляции. Закрывающая линия EOF должна выполняться ТОЛЬКО с символами табуляции.

Предпочтительным решением было бы хранить «таблицу поиска» в отдельном файле. Это будет выглядеть

cat myEmailFinder2 
#!/bin/bash 
case $# in 0) echo "usage: myEmailFinder2 CustID" ; exit 1 ;; esac 

cfgDir="/usr/local/data" 

# given cust file like 
# cust_id "\t" email_addr 
fn_myEmailFinder() { 
    awk -F"\t" -v cust_id="$1" '{ 
     if ($1 == cust_id) { 
       print $2 
     } 
     }' "$cfgDir"/emaillist.cfg 

#send an email to cust in $1 
emailAddr=$(fn_myEmailFinder "$1") 
mailx -S "Test Email" "$emailAddr" <<-EOM 
    Here is the body of an email addressed to $emailAddr with CustID=$custID 
EOM 

где emaillist.cfg выложена, как указано выше, с разделителями табуляции.

IHTH

+0

Спасибо, я попробую это. Я новичок в оболочке, поэтому я не был уверен, что сохранение в сценарии возможно, я создам файл для хранения всех данных. Я должен был бы просто запустить эту функцию внутри уже существующего скрипта/команды оболочки правильно? – Deldran

+0

Да, я считаю, что вы должны иметь возможность запускать функцию в вашем скрипте. Обратите внимание, что если ваш файл имеет более двух столбцов (или что идентификатор или адрес электронной почты не указаны в первом и втором столбцах), вам нужно будет изменить '$ 1' и/или' $ 2', чтобы извлечь нужные данные. Данные должны быть разделены табуляцией. Я бы рекомендовал вам скопировать вставку только часть 'awk '{....}' file' и внести небольшие изменения в это, чтобы понять, как это работает. Затем используйте 'emailAddr = $ (fn_myEmailFinder" $ userID ")' для хранения значений для переменных. Если вы застряли, отправьте новый вопрос. Используйте инструмент '{}' в левом верхнем углу окна редактирования. Удачи. – shellter

+0

Спасибо, я собираюсь проверить это. Я знаю, что заработал $ 1, $ 2 и т. Д. Я ценю всю помощь. Я верну свои результаты. – Deldran

0
#!/bin/bash - 
''''echo "Customer number: $1" 
X=$(/bin/env python $0 $1) 
echo $X 
exit 
''' 

customers = { 
    42: 'customerA' 
    ,43: 'customerB' 
} 

import sys 
print customers.get(int(sys.argv[1]), '') 
sys.exit(0) 

... - |

если ["$ 1" = "42"]; затем X = «CustomerA»; fi
если ["$ 1" = "43"]; затем X = «CustomerB»; fi

Смежные вопросы