Bacana! Scripts são bem úteis embora seja uma linguagem bem difícil por ter vários jeitos de fazer as mesmas coisas, não ter tipos fortes, e também regras estranhas de conversão de tipos.
A parte mais difícil da programação na maioria das vezes nem é fazer o que precisa ser feito, mas sim verificar que você tem todos os ingredientes antes de começar. Um script pra fritar um ovo seria bastante simples se for “Quebre o ovo na frigideira com um pouco de óleo e fogo baixo, aguarde 2 minutos, desligue o fogo, coma o ovo”. Nesse ponto o script funciona perfeitamente para você pois vc já conhece o seu fogão, sua geladeira e sua despensa. Porém o script para fritar um ovo em qualquer lugar não pode ser assim, pois alguém na Finlândia que pega a frigideira, coloca óleo, começa a esquentar, pega o ovo, IHHH não tem ovo, terminou o script mas a panela ficou no fogo ligado! A receita para fritar um ovo pode virar uma receita para estragar uma panela…
Pessoalmente eu uso bastante scripts feitos por mim, e quando procuro ou vejo o script de alguém, pego as partes interessantes para fazer meu próprio. Scripts para divulgação geral são inseguros para um usuário comum (não programador) executar, especialmente quando precisa ser executado em modo de administrador. Uma vez que seja dada a senha, pode acontecer qualquer coisa, inclusive o que a pessoa espera que aconteça! Eu jamais recomendo que pessoas saiam executando código de terceiros (que não são de programas oficiais da distribuição).
Isso posto, e imaginando que esse script seria incluído em um programa oficial nas distribuições, algumas considerações minhas seriam:
Verificar todas as dependências antes de iniciar o programa.
Severidade alta. Pensei em um array de comandos usados e comandos de verificação. Incluiria todos eles para verificação em loop. Ao não achar um programa (ou melhor ainda se uma versão antiga incompatível for encontrada), o script se encerra com uma mensagem. No caso de você querer adicionar suporte a várias distribuições, daí sim usar o comando para instalar o pacote que provê o referido programa, e reinicia a verificação. Você pensou nisso e verificou o ntfs-3g e p7zip, mas o script também usa sudo, sgdisk, wipefs. Isso evita do seu programa acabar no meio com “XXXX not found”.
Comentários são legais, mas não abuse
Severidade baixa. A princípio o nome das funções e variáveis devem ser auto explicativos, de modo que os comentários devem conter informações adicionais relevantes, mas evitar a explicação do código em si, que deve ser legível. Evite especialmente comentar linha a linha, a menos que seja um exercício de aprendizado. Comentar cada linha também é comportamento padrão dos geradores automáticos de código por inteligência artificial, então dá um jeitão de código pré-fabricado ao seu programa.
Seleção da iso
Severidade: baixa. O programa está bem legal nas seleções, mas pegar simplesmente a primeira iso não ficou bom. O ideal seria uma nova seleção com todos os arquivos iso que foram achados no diretório para o usuário escolher qual será escrita.
Funções são específicas
Severidade alta. Uma das piores práticas (e das mais fáceis de fazer) é começar a inchar funções simples com outras tarefas. Veja que a função format_drive
está também selecionando a ISO e verificando dependências. Não faz sentido estar ali, mesmo que comentado. Crie funções específicas na parte principal do script. Eu acho que nem precisaria essa função, uma vez a função partformat
faz essas tarefas mas com outro nome.
Nomes de variáveis e funções
Severidade: terrível (isso pode acabar com um projeto). Geralmente um programa segue regras sobre os nomes, as duas principais são a capitalização ou o símbolo sublinhado. Se o programa é seu, vc que escolhe, mas mantenha a coerência. Veja que a função format_drive
está com sublinhado, mas partformat
está da pior forma possível: abreviada e sem diferenciação. Esse é o verdadeiro terror até para você mesmo no futuro. Em um outro programa sem coerência isso poderia ser abreviação de ‘packed real-time formatter’.
Parâmetros
Severidade média. Embora o seu script não necessite nenhum parâmetro para funcionamento, a função principal está usando, e passando isso para as sub funções que também não necessitam. Embora deixar não cause problema no script, ele causa confusão para quem tenta entendê-lo pois imagina que será usado em algum momento.