Adicionando outra variável para até o comando

0

Eu tenho o seguinte comando, que funciona bem, mas eu gostaria de adicionar uma outra variável de alguma forma:

#!/bin/bash
x=40000
until [ $x = "180000" ]; do
        dd bs=1 if=static.file of=extracted${x}.file skip=12345 count=$x;
        first_ten=$(hexdump -e '1/1 "%.2X"' "extracted${x}.file" | head -c 10);
                if [ "$first_ten" == "1234567890" ]
                then
                echo "${x}" >> correct.txt;
                fi;
        rm extracted${x}.file;
    ((x++))
done

Eu gostaria de adicionar uma variável incremental à seção "skip" para que, assim que for concluída, a variável 'x' aumente a variável 'y' (pular) em 1 e inicie o processo.

#!/bin/bash
y=12345
x=40000
until [ $x = "180000" ]; do
        dd bs=1 if=static.file of=extracted${x}.file skip=$x count=$x;
        first_ten=$(hexdump -e '1/1 "%.2X"' "extracted${x}.file" | head -c 10);
                if [ "$first_ten" == "1234567890" ]
                then
                echo "${y}_${x}" >> correct.txt;
                fi;
        rm extracted${x}.file;
    ((x++))
done

Apenas não totalmente certo de como conseguir isso.

    
por th3joker 25.01.2016 / 01:58

2 respostas

1

Você pode usar dois for loops, ou seja, um para y e um para x (ou while / until no loop y , ou seja, o loop externo):

#!/bin/bash 
for ((y=0; y<12345; y++)); do
    for ((x=40000; x<180000; x++)); do
        dd bs=1 if=static.file of=extracted${x}.file skip=12345 count=$x;
        first_ten=$(hexdump -e '1/1 "%.2X"' "extracted${x}.file" | head -c 10);
                if [ "$first_ten" == "1234567890" ]
                then
                echo "${x}" >> correct.txt;
                fi;
        rm extracted${x}.file;
    done
done

Altere os valores para atender sua necessidade.

Exemplo:

% cat scr.sh 
#!/bin/bash
for ((y=0; y<=3; y++)); do
    for ((x=0; x<=2; x++)); do
        echo "This is $x : $y"
    done
done

% ./scr.sh  
This is 0 : 0
This is 1 : 0
This is 2 : 0
This is 0 : 1
This is 1 : 1
This is 2 : 1
This is 0 : 2
This is 1 : 2
This is 2 : 2
This is 0 : 3
This is 1 : 3
This is 2 : 3
    
por heemayl 25.01.2016 / 03:27
1

Se você quiser testar as duas variáveis, use & amp; & amp; operador e outro teste

until [ $x  -eq 180000" ] && [ $y -eq  9999 ]; do
    
por Sergiy Kolodyazhnyy 25.01.2016 / 03:16