for i in {01..31} как получить 01 02 03 ... ?

Автор zCirill, 10 июня 2016, 12:51:56

« назад - далее »

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

zCirill

Добрый день.

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

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

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

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

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

endru

может расскажешь для чего это нужно, а то окажется что циклы там вообще не нужены...
ckl="01 02 03 04 05" ;for i in $ckl ; do  echo $i; done

zCirill

делаю 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

Я не программист, если что :-(
Первое, что пришло в голову:
#!/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


ZEN

#5
С помощью 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
Crimea is Ukraine

zCirill

вариант с  seq то что нужно!
спасибо