Execução do Script

1. Execução do Script

Pedro Roxo
Roxo

(usa Outra)

Enviado em 09/04/2020 - 08:15h

Olá eu comecei agora a programar em Linux e estou fazendo um mini projeto em que tenho de programar um script. Uma das condições é:
Se for escrito -h na linha de comandos (ou seja, ./nome_script.sh -h) tem que ser mostrado uma pequena ajuda no funcionamento do script, se for -i, deve ser criado um ficheiro de texto e assim sucessivamente... Como é que eu faço para executar o script com esses -h ou .i, etc?


  


2. Re: Execução do Script

Rogerio
RogerDez

(usa Outra)

Enviado em 09/04/2020 - 09:29h

se for só uma opção, '-h', e essa opção estiver obrigatoriamente como primeiro arg posicional:

[[ "$1" = -h ]] && cat<<-! && return 0
corona brasil -- ministério da saúde
uso: corona5 arq.csv [csv|last] [estado|brasil] [coluna]
...
!


se forem várias opções, utilize o 'getopts' e um loop de case



3. Re: Execução do Script

Pedro Roxo
Roxo

(usa Outra)

Enviado em 09/04/2020 - 10:40h

Primeiramente agradeço a sua resposta. São várias opções mesmo... Tem que ser uma para a execução normal do script, ou seja, ./nome.sh, uma para ./nome -h que mostra ajuda e uma para ./nome -i que cria um subdiretório e grava dados de uma pagina num ficheiro html... Então a sua sugestão seria usar o getopts.. Pode dar um exemplo pro favor? Como eu comecei há pouco tempo ainda nem usei nem getopts nem case...


4. Re: Execução do Script

Rogerio
RogerDez

(usa Outra)

Enviado em 09/04/2020 - 14:45h

dicas boas:
https://www.dicas-l.com.br/arquivo/fatiando_opcoes_com_o_getopts.php

eu sempre uso um 'shift' depois do while loop pq ainda processo as variáveis das opções, checo se são incompatíveis, e ainda uso outros argumentos posicionais que não são opções.
veja um outro exemplo do get opts sendo usado a partir da linha 428:
https://pastebin.com/zPSKBSUy

eu tinha uma ref, em inglês, bem organizada com um exemplos bom mas perdi!!!
depois que eu peguei aquele exemplo, sempre uso o mesmo...

#ajuda
help=" blah
blah blah
blah"

subpasta1="$(pwd)/subpasta"

#funções
errf() {
echo 'erro' 1>&2
exit 1
}

funcaox() {
mkdir "$subpasta1"
cd "$subpasta1" || return 1
wget 'www.site.br'
}


## parse options
while getopts ':hi' opt; do
case ${opt} in
( h ) # página de ajuda
echo "$help"
exit 0
;;
( i )
#chamada de função
funcaox || errf
exit
;;
( \? )
# invalid opt
echo "opção inválida: -$optarg" 1>&2
exit 1
;;
esac
done
shift $((optind -1)) #este shift retira as opções processadas

#se não houver opções, ele vai continuar o script
true





5. Re: Execução do Script

Pedro Roxo
Roxo

(usa Outra)

Enviado em 09/04/2020 - 18:02h

Muito obrigado. Já me ajudou bastante. Então se o script for executado ./nome.sh, o true no fim é o que garante que essas opções são ignoradas?

E já agora nesta linha:

while getopts ':hi' opt; do

O que é que significa o ':hi'? Sei que têm que ver com as opções mas porquê o ':' e porquê que se escreve isso assim? De resto entendi e já comecei a usar até. A sua ajuda valeu


6. Re: Execução do Script

Rogerio
RogerDez

(usa Outra)

Enviado em 09/04/2020 - 20:51h

LEIA a seção de 'Manipulação de erros' do primeiro link com a explicação do Julio Cézar

se não tiver a opção ':' sozinha, acho que o case de (\?) não vai ser capturado quando for adicionada opção não-permitidas e vai gerar uma mensagem de erro padrão.. ou seja, é só para personalizar o que fazer quando uma opção não-permitida for inserida... inclusive vc poderá ignorá-las ao invés de apresentar um erro, se quiser


7. Re: Execução do Script

Pedro Roxo
Roxo

(usa Outra)

Enviado em 10/04/2020 - 05:53h

Muito obrigado. A sua ajuda foi preciosa






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts