Автор Тема: for i in {01..31} как получить 01 02 03 ... ?  (Прочитано 1537 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zCirill

Добрый день.

Мне нужно в переменную получать двухзначные числа.

{01..31} выдает 1 2 3 ... 10 11 12 и тд.

А мне нужно 01 02 03 04

Пока обхожусь двумя циклами, в которых есть 1..9 и к переменной добавляю 0, и второй цикл, где использую 10..31
Но это добавляет проблем )

Нет ли какого то хинта позволяющего получить нужный мне результат за один цикл?
 

Оффлайн endru

Re: for i in {01..31} как получить 01 02 03 ... ?
« Ответ #1 : 10 Июня 2016, 13:01:46 »
может расскажешь для чего это нужно, а то окажется что циклы там вообще не нужены...
ckl="01 02 03 04 05" ;for i in $ckl ; do  echo $i; done

Оффлайн zCirill

Re: for i in {01..31} как получить 01 02 03 ... ?
« Ответ #2 : 10 Июня 2016, 14:20:52 »
делаю mysql вызовы к базе астериска, нужно делать выборку по датам.
скажем от 1 до 25 числа

сейчас делаю так.


for i in {1..9}; do mysql -uasterisk -p**** asterisk -e "select count(*) from asteriskcdrdb.cdr where calldate like '2016-04-0$i%' and src like '30_'\G" | tail -1 | cut -f2 -d" "; done


и второй вызов


for i in {10..25}; do mysql -uasterisk -p**** asterisk -e "select count(*) from asteriskcdrdb.cdr where calldate like '2016-04-$i%' and src like '30_'\G" | tail -1 | cut -f2 -d" "; done


и это иногда заставляет делать лишние действия в последствии.
 

Yrii

  • Гость
Re: for i in {01..31} как получить 01 02 03 ... ?
« Ответ #3 : 10 Июня 2016, 15:20:07 »
Я не программист, если что :-(
Первое, что пришло в голову:
#!/bin/bash

for i in 0{1..5} {10..18}; do
    echo $i
done
$ ./test
01
02
03
04
05
10
11
12
13
14
15
16
17
18
 
Пользователи, которые поблагодарили этот пост: zCirill

Оффлайн zCirill

Re: for i in {01..31} как получить 01 02 03 ... ?
« Ответ #4 : 10 Июня 2016, 16:21:08 »
прекрасно! спасибо за хинт
 

Оффлайн ZEN

Re: for i in {01..31} как получить 01 02 03 ... ?
« Ответ #5 : 11 Июня 2016, 11:47:02 »
С помощью printf можно задать количество нулей:
$ for i in {1..31}; do printf "%02d\n" $i; done
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ for i in {1..31}; do printf "%03d\n" $i; done
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031

Еще вариант через seq:
$ for i in $(seq -w 1 31); do echo $i; done
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
« Последнее редактирование: 11 Июня 2016, 11:51:13 от ZEN »
Crimea is Ukraine
 
Пользователи, которые поблагодарили этот пост: zCirill

Оффлайн zCirill

Re: for i in {01..31} как получить 01 02 03 ... ?
« Ответ #6 : 14 Июня 2016, 11:34:05 »
вариант с  seq то что нужно!
спасибо
 

Теги:
     

    получить все последующие строки после 10 совпадения bash

    Автор zCirill

    Ответов: 1
    Просмотров: 1442
    Последний ответ 27 Июня 2016, 05:33:00
    от endru
    Получить серийник HDD в kernel space

    Автор Supaplex

    Ответов: 1
    Просмотров: 1879
    Последний ответ 23 Сентября 2015, 15:42:47
    от vic5710
    Как в окне терминала debian 6 получить справку по синтаксису perl ?

    Автор soldafon

    Ответов: 2
    Просмотров: 1554
    Последний ответ 11 Октября 2015, 18:39:27
    от soldafon