2016-05-24 5 views
0

Я пытаюсь изучить сценарий оболочки и написать простой скрипт для увеличения значений Hex в цикле.Shell Script: Hexadecimal Loop

Вот мой сценарий:

increment=0x0001 
handle=0x0001 

for((i=1;i<=20;i++)) 
do 
    echo $handle 
    handle=$(($handle + $increment)) 
    handle=$(printf '%x' $handle) 
done 

Вот мой результат:

0x0001 
2 
3 
4 
5 
6 
7 
8 
9 
a 
1 
2 
3 
4 
5 
6 
7 
8 
9 
a 

Он работает отлично до 10 итераций, но после того, что он, начиная с 1 снова.

Может ли кто-нибудь сообщить мне о моей ошибке?

EDIT: После удаления handle=$(printf '%x' $handle) вывода строки:

0x0001 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 

На самом деле я хочу выход только в HEX.

+0

преобразовать в шестнадцатеричном –

+0

Я не совсем понимаю вашу проблему, но вы можете использовать это тело цикла, чтобы решить эту проблему: 'Printf ' % x \ n '$ handle; handle = $ (($ handle + $ increment)) ' – Aaron

ответ

4

Это связано с тем, как вы печатаете значение попробовать printf '%#x' или printf '%#X'

Просто измените линию, которую вы используете для печати содержимого с ведущим 0x как: -

handle=$(printf '%#x' $handle) 

(или) иметь ведущий шестигранный характер, как 0X

handle=$(printf '%#X' $handle) 

с изменениями, вы получите на выходе, как показано ниже: -

$ ./script.sh 
0x0001 
0x2 
0x3 
0x4 
0x5 
0x6 
0x7 
0x8 
0x9 
0xa 
0xb 
0xc 
0xd 
0xe 
0xf 
0x10 
0x11 
0x12 
0x13 
0x14 
0x15 
0x16 
0x17 
0x18 
0x19 
0x1a 
0x1b 
0x1c 
0x1d 
0x1e 
0x1f 
0x20 

Дополнительные опции форматирования проверьте здесь: - http://wiki.bash-hackers.org/commands/builtin/printf (а) http://ss64.com/bash/printf.html

+0

Я получаю' строка 7: '0x2' + 0x0001: синтаксическая ошибка: недействительный арифметический оператор (ошибка токена равна «0x2 '+ 0x0001») 'error –

+0

Can вы публикуете полный скрипт? Это будет отличная помощь .... –

+0

Большое спасибо. Он разрешил мою проблему –