Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Uma aplicação mais completa

Após um longo hiato, retomaremos o trabalho em nosso sys_info_page programa. Nossa próxima adição irá adicionar várias opções de linha de comando ao programa da seguinte forma:

Arquivo de saída. Adicionaremos uma opção para especificar um nome para um arquivo para conter a saída do programa. Será especificado como -f lima or --Arquivo lima.

Modo interativo. Esta opção solicitará ao usuário um nome de arquivo de saída e determinará se o arquivo especificado já existe. Em caso afirmativo, o usuário será avisado antes que o arquivo existente seja sobrescrito. Esta opção será especificada por qualquer -i or --interativo.

Ajuda. Ambas -h or --Socorro pode ser especificado para fazer com que o programa exiba uma mensagem informativa de uso.

Aqui está o código necessário para implementar o processamento da linha de comando:



uso () {

echo "$ PROGNAME: uso: $ PROGNAME [-f arquivo | -i]" return

}

# opções de linha de comando do processo interativo =

uso () {

echo "$ PROGNAME: uso: $ PROGNAME [-f arquivo | -i]" return

}

# opções de linha de comando do processo interativo =


nome do arquivo =


enquanto [[-n $ 1]]; caso $ 1 em

-f | --Arquivo)

mudança

nome do arquivo = $ 1

;;

nome do arquivo =


enquanto [[-n $ 1]]; caso $ 1 em

-f | --Arquivo)


-i | --interactive) interativo = 1

;;

-h | --help) saída de uso

;;

*) uso> & 2

sair 1

;;

-i | --interactive) interativo = 1

;;

-h | --help) saída de uso

;;

*) uso> & 2

sair 1

;;


esac

turno feito

esac

turno feito


imagem

Primeiro, adicionamos uma função shell chamada uso para exibir uma mensagem quando a opção de ajuda é chamada ou uma opção desconhecida é tentada.

A seguir, começamos o loop de processamento. Este loop continua enquanto o parâmetro posicional

$ 1 não está vazio. No final do loop, temos um comando shift para avançar os parâmetros posicionais para garantir que o loop acabe.

Dentro do loop, temos um casas instrução que examina o parâmetro posicional atual para ver se ele corresponde a qualquer uma das opções com suporte. Se um parâmetro compatível for encontrado, ele será acionado. Se uma escolha desconhecida for encontrada, a mensagem de uso será exibida e o script será encerrado com um erro.

A -f parâmetro é tratado de uma maneira interessante. Quando detectado, causa um mudança ocorrer, o que avança o parâmetro posicional $1 ao argumento do nome do arquivo fornecido ao -f opção.

A seguir, adicionamos o código para implementar o modo interativo:



# modo interativo


if [[-n $ interativo]]; então, embora seja verdade; Faz

ler -p "Digite o nome do arquivo de saída:" nome do arquivo if [[-e $ nome do arquivo]]; então

read -p "'$ filename' existe. Substituir? [y / n / q]>" case $ REPLY em

Y | y) pausa

# modo interativo


if [[-n $ interativo]]; então, embora seja verdade; Faz

ler -p "Digite o nome do arquivo de saída:" nome do arquivo if [[-e $ nome do arquivo]]; então

read -p "'$ filename' existe. Substituir? [y / n / q]>" case $ REPLY em

Y | y) pausa


;;

Q | q) echo "Programa encerrado." saída

;;

*) Prosseguir

;;

esac

elif [[-z $ filename]]; então continue

outro

quebrar

fi

feito

fi

;;

Q | q) echo "Programa encerrado." saída

;;

*) Prosseguir

;;

esac

elif [[-z $ filename]]; então continue

outro

quebrar

fi

feito

fi


Se o interativo variável não está vazia, um loop infinito é iniciado, que contém o prompt do nome do arquivo e o código de manipulação de arquivo existente subsequente. Se o arquivo de saída desejado já existir, o usuário é solicitado a sobrescrever, escolher outro nome de arquivo ou sair do programa. Se o usuário escolher sobrescrever um arquivo existente, um quebrar é executado para encerrar o loop. Observe como o casas instrução apenas detecta se o usuário escolhe sobrescrever ou sair. Qualquer outra escolha faz com que o loop continue e avisa o usuário novamente.

Para implementar o recurso de nome de arquivo de saída, devemos primeiro converter o código de escrita de página existente em uma função shell, por motivos que ficarão claros em um momento:



write_html_page () {cat << - _EOF_

$ TITLE

$ TITLE

$ TIMESTAMP

$ (report_uptime)

$ (report_disk_space)

$ (report_home_space)

_EOF_ retorno

}


# saída da página html


if [[-n $ filename]]; então

write_html_page () {cat << - _EOF_

$ TITLE

$ TITLE

$ TIMESTAMP

$ (report_uptime)

$ (report_disk_space)

$ (report_home_space)

_EOF_ retorno

}


# saída da página html


if [[-n $ filename]]; então


se tocar em $ filename && [[-f $ filename]]; então write_html_page> $ filename

outro

echo "$ PROGNAME: Não é possível gravar o arquivo '$ filename'"> & 2 exit 1

fi mais

write_html_page

fi

se tocar em $ filename && [[-f $ filename]]; então write_html_page> $ filename

outro

echo "$ PROGNAME: Não é possível gravar o arquivo '$ filename'"> & 2 exit 1

fi mais

write_html_page

fi


O código que lida com a lógica do -f opção aparece no final da lista mostrada acima. Nele, testamos a existência de um nome de arquivo e, se for encontrado, um teste é executado para ver se o arquivo é realmente gravável. Para fazer isso, um tocar é executado, seguido por um teste para determinar se o arquivo resultante é um arquivo normal. Esses dois testes cuidam de situações onde um nome de caminho inválido é inserido (tocar irá falhar) e, se o arquivo já existir, é um arquivo normal.

Como podemos ver, o write_html_page função é chamada para realizar a geração real da página. Sua saída é direcionada para a saída padrão (se a variável nome do arquivo está vazio) ou redirecionado para o arquivo especificado.


Top OS Cloud Computing na OnWorks: