2015-08-17 4 views
2

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

if [[ $condition == *"added"* ]] ; then 

как только я пытаюсь искать точную Comparision

if [[ "$condition" == "CONDITION:${2} DATE:${3} added" ]] ; then 

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

ОБНОВЛЕНИЕ!

Итак, с обратной связью, которую я получил, я попытался сделать мой код более понятным и получить представление о том, что представляют собой исходные значения строки. Спасибо всем за ответ за ответ. Ниже приведен обновленный сценарий и выход

#!/usr/bin/sh 
# This script posts a condition sent to it by the Shout Destination table 
# in CCM. Used to generate JOB_LATE incidents. 
# If an error is encountered it is logged in the 
# job_late_error_log.txt file. 
# utility -> ctmcontb -ADD <Condition Name> <Condition Date> 
# Condition format -> [email protected]%%JOBNAME-%%NODEID -> JOB_LATE format 
# $2 = [email protected]%%JOBNAME-%%NODEID $3 = <Condition Date> 
cmd_output=$(ctmcontb -ADD $2 $3) 
time_stamp=$(date) 
working_directory=/apps/ctm/devsv/scriptsadmin/do_condition/ 
error_file=job_late_error_log.txt 
write_file_to_location=$working_directory$error_file 
#if [[ $cmd_output == *"added"* ]] ; then 
echo below is the hex output of "CONDITION:${2} DATE:${3} added" 
echo "CONDITION:${2} DATE:${3} added" | od -xc 
echo below is the command for $cmd_output 
echo "$cmd_output" | od -xc 
cmd_ouput_no_space = "$(echo -e "${cmd_output}" | tr -d '[[:space:]]')" 
echo below is the command with white spaces removed 
echo $cmd_ouput_no_space 
if [[ "$cmd_ouput_no_space" == "CONDITION:${2} DATE:${3} added" ]] ; then 
    echo $cmd_ouput_no_space 
    echo successfull ran util 
    exit 0 
else 
# echo $cmd_ouput_no_space $time_stamp >> $write_file_to_location 
    echo $cmd_ouput_no_space 
    echo error occurred running util 
    exit 1 
fi 

и выход:

ctmtest1-tctmsv80 [9] job_late.sh ctmtest1 u350932-test2 0816 
below is the hex output of CONDITION:u350932-test2 DATE:0816 added 
0000000  434f 4e44 4954 494f 4e3a 7533 3530 3933 
      C O N D I T I O N : u 3 5 0 9 3 
0000020  322d 7465 7374 3220 4441 5445 3a30 3831 
      2 - t e s t 2  D A T E : 0 8 1 
0000040  3620 6164 6465 640a 
      6  a d d e d \n 
0000050 
below is the command for CONDITION:u350932-test2 DATE:0816 added 
0000000  2043 4f4e 4449 5449 4f4e 3a75 3335 3039 
       C O N D I T I O N : u 3 5 0 9 
0000020  3332 2d74 6573 7432 2044 4154 453a 3038 
      3 2 - t e s t 2  D A T E : 0 8 
0000040  3136 2061 6464 6564 0a00 
      1 6  a d d e d \n 
0000051 
job_late.sh[19]: cmd_ouput_no_space: not found 
below is the command with white spaces removed 


error occurred running util 

им не знаком с одой -Xc вызовом, но это выглядит как мои ценности различны, которые имеют смысл. Не знаете почему?

UPDATE 2:

Так я попытался удалить все пробелы, используя линии

cmd_ouput_no_space = "$(echo -e "${cmd_output}" | tr -d '[[:space:]]')" 

, что я нашел здесь:

How to trim whitespace from a Bash variable?

, но это не похоже на работу. Я обновил свой оригинальный скрипт и вывел вверху этого сообщения с ошибками im.

+2

Посмотрите на шестнадцатеричный дамп выхода. например, 'job_late.sh ctm ... | xxd' –

+1

Пожалуйста, отобразите '$ condition' в шестнадцатеричном формате. Вы можете использовать: 'echo '$ condition" | od -xc'. Убедитесь, что '' $ condition "' находится внутри двойных кавычек, иначе мы пропустим лишние пробелы. В дополнение к удаленной почте @ JohnathanLeffler, пожалуйста, уточните свой результат. – cdarke

+0

Вы используете этот сценарий с помощью команд 'source' или dot (' .')? Если вы этого не сделаете, операторы 'return' недействительны - их можно использовать только в исходном файле или в функции. Вероятно, вы имеете в виду 'exit'. – cdarke

ответ

0

Перед съемкой cmd_output есть пробел перед CONDITION.

+0

... – 123

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