2014-10-15 2 views
0
len=`echo "${#jday}"` 

if [ "$len"==1 ]; 
then 
new_jday=`echo "00 $jday" | awk '{print $1$2}'` 
fi 

В приведенном выше коде я получаю переменную len, которая представляет собой число цифр в заданном целое ($ jday) в цикле. Эти целые числа имеют либо 1, 2, либо 3 цифры, а для тех, у кого есть только 1 цифра, я хочу добавить «00» (например, если целое число равно 1, оно должно выглядеть как 001). Однако, когда я запускаю вышеуказанный код, все целые числа добавляются с 00, и я не понимаю, почему это так. Когда я эхо-len, я получаю правильную длину (то есть 1, 2 или 3). Буду признателен за любую оказанную помощь.

+2

Я вижу несколько ошибок здесь: Len = 'Эхо "$ {# jday}"' может быть просто 'Len = $ {# jday} ' ' if ["$ len" == 1] 'неверно, потому что вам нужны пробелы вокруг' == ', а также должно быть' -eq', потому что это целочисленное сравнение. Наконец, 'new_jday =' echo '00 $ jday "| awk '{print $ 1 $ 2}' '' выглядит довольно уродливо. Почему не просто 'new_jday = 00 $ jday'? Попытайтесь указать, каков ваш общий ввод и ваш желаемый результат, и мы постараемся найти лучший способ справиться с этим. – fedorqui

+1

Для числового форматирования попробуйте 'printf '% 03d \ n'" $ {# jday} "'. –

+0

Спасибо fedorqui, решил его по-другому без инструкции if, которую я описываю в более позднем комментарии. Большое спасибо за ваше время! и да, Этан Рейснер, это именно то, что я использовал! огромное спасибо! – januka

ответ

0

'==' используется для сравнения строк, попробуйте '-eq'

if [ "1"==1 ]; 
then 
    echo "1"; 
fi 

if [ "2"==1 ]; 
then 
    echo "2"; 
fi 

if [ "1" -eq 1 ]; 
then 
    echo "1"; 
fi 

if [ "2" -eq 1 ]; 
then 
    echo "2"; 
fi 

выведет:

1 
2 
1 
+0

Спасибо злым, я попробовал оба ваши предложения, прежде чем публиковать вопрос, но когда я использую -eq или оставляю пространство по обе стороны от ==, я получаю постоянный вывод 005 независимо от ввода. На данный момент я смог решить эту проблему, включив следующую строку без инструкции if. Я могу использовать свой вывод, если все отображается на 3 цифры. Еще раз спасибо за ваше время! new_jday = $ (printf "% 03d" $ jday) – januka

0

Вместо того, чтобы идти через, если условие, я решил использовать функцию PRINTF для форматирования моих целых чисел до 3 цифр следующим образом;

new_jday = $ (Printf "% 03d" $ jday)