rpoliveira_rop
(usa Outra)
Enviado em 05/05/2020 - 12:02h
Prezados(as),
Bom dia!
Sou iniciante com shell Scripts, e gostaria de compartilhar aqui alguns problemas que estou tendo para tentar entender o que esta acontecendo, ou o que posso estar fazendo de errado para fazer a correção.
Tenho um script *.bsh, onde após chamar uma execução de uma package no banco de dados Oracle, pego o retorno dessa execução, coloco em uma variável, e ai sim preciso aplicar alguns tratamentos para poder ter os resultados que preciso:
vresp é a variável onde eu recebo o retorno do Banco de dados, que é uma linha, uma string com dados que serão quebrados. A Letra incial de cada campo, é desprezada na hora do comando “cut”, mas estão ordenadas da seguinte forma:
vs_status => status – CHAR Tamanho(2) Ex.: “OK”
V=> obriga validade(S/N) – CHAR tamanho(1) Ex.”VN”
L=> obriga lote(S/N) – CHAR Tamanho(1) Ex.: “LN”
U=> unidade – CHAR Tamanho(15)=> Ex.: “CX C/4”
B=> informação barra – NUMBER Tamanho(22)  Ex.: “B17891039026839”
P=> descrição – CHAR Tamanho(40) => Ex.:”PDESENGRAX ORQUIMOL GL 5LT BR002683”
Q=> filote – NUMBER Tamanho(7) => Ex.: “Q16”
C=> qtd.caixas – NUMBER Tamanho(10) => Ex.: “C0”
N=> possui cx? – CHAR Tamanho(1) => Ex.: “NN”
T=> tipo caixa – NUMBER Tamanho(5) => Ex.: “T0”
A=> capacidade caixa – NUMBER Tamanho(20) => Ex.: “A0”
Esse retorno preciso jogar em outras variáveis conforme explico abaixo:
vresp="OKVNLSUCX C/4_________B17891039026839________PDESENGRAX ORQUIMOL GL 5LT BR002683____Q16_____C0_________NNT0____A0___________________"
O comando “cut” no script esta da seguinte forma:
vsta=`echo -e $vresp | cut -c1-2`
vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c47-66 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c67-85 | tr -d '_'`
vqtcxbin=`echo -e $vresp | cut -c95-104 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c106-106 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c108-112 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c114-300 | tr -d '_'`
RESULTADO PÓS COMANDO :
vsta = OK
vval = N
vlote = S
vuni = CX C/4
vbarra = 17891039026839
vprod1 = DESENGRAX ORQUIMOL G
vprod2 = L 5LT BR002683Q
vqtcxbin = N
vcxbin = T
vtpcxbin = A
vcptpcxbin =
Conforme podem ver acima ele “desposiciona” as informações.
Fiz um outro teste incluindo a informação do “filote”, e retirando os espaços da descrição, conforme abaixo:
vresp="OKVALBUCCCCCCCCCCCCCCCBDDDDDDDDDDDDDDDDDDDDDDPEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEQFFFFFFF___________CGGGGGGGGGGNHTIIIIIAJJJJJJJJJJJJJJJJJJJJ"
vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c47-66 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c67-86 | tr -d '_'`
vfilote=`echo -e $vresp | cut -c88-94 | tr -d '_'`
venigma=`echo -e $vresp | cut -95-105`
vqtcxbin=`echo -e $vresp | cut -c107-116 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c118-118 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c120-124 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c126-145 | tr -d '_'`
O resultado dá essa mensagem e os valores abaixo:
cut: invalid option -- '9'
Try 'cut --help' for more information.
Vsta = OK
Vval = A
Vlote = B
vuni = CCCCCCCCCCCCCCC
vbarra = DDDDDDDDDDDDDDDDDDDDDD
vprod1 = EEEEEEEEEEEEEEEEEEEE
vprod2 = EEEEEEEEEEEEEEEEEEEE
vfilote = FFFFFFF
venigma =
vqtcxbin = GGGGGGGGGG
vcxbin = H
vtpcxbin: = IIIII
vcptpcxbin: = JJJJJJJJJJJJJJJJJJJJ
Agora, se eu inverto a ordem da linha, ai dá certo, conforme abaixo:
vresp="OKVNLSUCX C/4_________B17891039026839________Q16_____C0_________NNT0____A0___________________PDESENGRAX ORQUIMOL GL 5LT BR002683____"
vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vfilote=`echo -e $vresp | cut -c47-53 | tr -d '_'`
vqtcxbin=`echo -e $vresp | cut -c55-64 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c66-66 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c68-72 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c74-93 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c95-115 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c116-135 | tr -d '_'`
vval: N
vlote: S
vuni CX C/4
vbarra 17891039026839
vfilote 16
vqtcxbin 0
vcxbin N
vtpcxbin: 0
vcptpcxbin: 0
vprod1 DESENGRAX ORQUIMOL GL
vprod2 5LT BR002683
Alguém saberia me informar, porque do erro:
cut: invalid option -- '9'
Try 'cut --help' for more information.
E porque ao inverter a linha, ele já tem mais o problema de desposicionar as informações que vem depois da descrição?! Teria algum problema com espaços, ou caracteres especias?!
Obrigada.
Att,