Dúvida sobre funcionamento

1. Dúvida sobre funcionamento

leonald
leonald

(usa Ubuntu)

Enviado em 24/07/2019 - 09:11h

Bom dia/tarde/noite/madrugada!

Estou estudando Shell, e pegando vários scripts como base para montar um para meu uso. No caso seria um "Wizard" para criação/configuração de VM via linha de comando pelo virtualbox. Estou pegando como base este que achei aqui

https://www.vivaolinux.com.br/script/Administracao-de-VirtualBox-com-ShellScript,

mas estou mudando várias coisas. Por exemplo o processo de seleção do tipo de OS, usei como base um array encontrado no instalador do Pi-Hole. Mas como funciona? Segue abaixo:

Algumas coisas eu sei, como a váriavel, o loop for, para que serve o IFS (mais ou menos). Se alguem puder me explicar ficaria muito grato!


OSChooseOptions=()
local OSServerCount=0
# Save the old Internal Field Separator in a variable
OIFS=$IFS
# and set the new one to newline
IFS=$'\n'
# Put the DNS Servers into an array
for OS in ${OSTYPE}
do
TYPE="$(cut -d':' -f2 <<< "${OS}")"
OSChooseOptions[OSServerCount]="${TYPE}"
(( OSServerCount=OSServerCount+1 ))
OSChooseOptions[OSServerCount]=""
(( OSServerCount=OSServerCount+1 ))
done
OSChooseOptions[OSServerCount]="Custom"
(( OSServerCount=OSServerCount+1 ))
OSChooseOptions[OSServerCount]=""
# Restore the IFS to what it was
IFS=${OIFS}
# In a whiptail dialog, show the options
OSchoices=$(whiptail --separate-output --menu "Selecione o Tipo de OS." ${r} ${c}$
"${OSChooseOptions[@]}" 2>&1 >/dev/tty) || \
# exit if Cancel is selected
{ printf " %bCancel was selected, exiting installer%b\\n" ; exit 1; }




  


2. Re: Dúvida sobre funcionamento

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 24/07/2019 - 11:04h


V se isso te satisfaz

http://www.dicas-l.com.br/cantinhodoshell/cantinhodoshell_20070103.php



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




3. Re: Dúvida sobre funcionamento

Vinicius Mello
vmmello

(usa Slackware)

Enviado em 24/07/2019 - 14:23h

A variável IFS indica para a shell qual separador usar ao quebrar strings.

No caso do código que você está usando, o IFS impacta no loop for:

for OS in ${OSTYPE}
do
# ...um monte de coisas...
done


O loop acima quebra a variável ${OSTYPE} e armazena uma peça de cada vez na variável $OS. Nas linhas anteriores, quando foi feito IFS=$'\n', é uma instrução pra shell quebrar as strings apenas no caractere de nova linha (por padrão a shell quebra em espaço, tab e nova linha, que é o equivalente a IFS=$' '$'\t'$'\n'). Possivelmente o autor queria evitar que a string fosse quebrada no caractere de espaço, caso alguma linha em $OSTYPE tivesse um caractere de espaço.

E depois do loop ele faz IFS=${OIFS} pra voltar o shell para o que estava antes, possivelmente o comportamento padrão de quebra de strings.

De uma forma mais geral, a variável IFS impacta os loops for e a função read, que são sobre separar strings. E também a expansão $*, que junta os elementos da array em uma string usando o separador em IFS. Mas são detalhes bem sutis que só se usa pra fazer manipulações bem detalhadas de string.

No link postado na mensagem anterior tem uma explicação mais detalhada com exemplos.


4. Re: Dúvida sobre funcionamento

leonald
leonald

(usa Ubuntu)

Enviado em 25/07/2019 - 07:42h

a minha maior dúvida mesmo era o array, mas já está bem explicado.

Isso está sendo usado, junto do whiptail para gerar uma lista dos OS disponiveis no VirtualBox para uma pré configuração.
OSChooseOptions[OSServerCount]="${TYPE}"
(( OSServerCount=OSServerCount+1 ))
OSChooseOptions[OSServerCount]=""
(( OSServerCount=OSServerCount+1 ))
done
OSChooseOptions[OSServerCount]="Custom"
(( OSServerCount=OSServerCount+1 ))
OSChooseOptions[OSServerCount]=""[/code]






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts