olá sou super iniciante ainda e crio alguns scripts pra me ajudar aqui na minha maquina
estou tentando criar um script que retorne o tamanho de um arquivo em bytes
saida esperada:
$echo teste > arquivo.exemplo # cria o arquivo para testar
$./an.sh #an.sh executa meu script
digite o nome do arquivo para analizar #o script solicita o nome do arquivo
arquivo.exemplo #eu forneço o nome do arquivo que eu criei acima
5 #o script retorna 5 (o tamanho da palavra teste no arquivo.exemplo)
tentei script bash e awk mas tive erro nos dois sei que o erro deve ser meu mas nao acho uma solução
vou colocar abaixo o que já tenho
an.sh #nome do script em sh
#!/bin/bash
echo "digite o nome do arquivo para analizar"
read ARQ
$(wc -c $ARQ | awk "{printf $1}")
an.awk #nome do script em awk
#!/usr/bin/awk -f
BEGIN {
printf "digite o nome do arquivo que deseja analizar \n"
getline filename < "/dev/stdin"
"wc -c filename" | getline size, $1
printf size
}
desculpe se tiver na categoria errada fiquei em duvida entre iniciante programacão e eu que fiz
1 curtida
Então, na quarta linha você está usando substituição de comando e ela é totalmente desnecessária nesse caso. Só use substituição de comando quando você estiver definindo por exemplo o valor de uma variável ou quiser usar o valor retornado como algum parâmetro em outro comando (ainda é aconselhável colocar esse valor em uma variável primeiro pra deixar seu script mais limpo).
A segunda coisa a corrigir é trocar as aspas duplas do comando awk por aspas simples, assim o comando vai funcionar como deveria, com o awk printando apenas a primeira coluna da saída do wc. Nota que o printf só printa os caracteres que você explicitamente quer que sejam printados, então ele não vai adicionar a quebra de linha automática que a maioria dos programas adicionam, talvez você queira trocá-lo por simplesmente print que por padrão adiciona a quebra de linha.
#!/bin/bash
echo "digite o nome do arquivo para analizar"
read ARQ
wc -c $ARQ | awk '{print $1}'
Nota também que existem outras melhorias no script que você pode fazer, como integrar a funcionalidade do comando eco diretamente no comando read… ao invés de pedir o arquivo ao usuário você também pode passar o arquivo como parâmetro ao abrir o script e então descartar o read e trocar a variável $ARQ por $1… e se realmente decidir manter o read você também pode construir um while loop compreendendo o resto do script assim não necessitará executar o script para cada vez que for pegar o tamanho de um arquivo, sendo necessário apertar CTRL C quando terminar para finalizar o script.
obrigado!
esse script na verdade é pra ser usado em outros scripts talvez como função ou coisa do tipo sabe?
quanto ao que você disse de integrar a função do echo direto no read eu já conhecia mas tem algum problema fazer como eu fiz é que eu acho que você quis dizer pra fazer:
read -p 'digite o nome do arquivo' ARQ
certo?
bom é que como eu raramente escrevo script e quando vou fazer alguma coisa no terminal eu só faço o que já esta no meu histórico mesmo
por exemplo eu digito:
mpv video1.mp4
quando vou assistir outro video eu só edito a entrada do meu historico para:
mpv video2.mp4
então fico com um pouco de dificuldade para saber o que cada opção faz e acabo me confundindo inteiro inclusive pra dar essa resposta que dei agora tive que usar:
read --help
pra ler se não nem saberia que era a opção menos -p
ou seja sei que a função tá aí mas tenho que ler o manual toda vez que vou escrever ou editar se não faço errado.
por isso faço meus scripts evitando ao maximo opções pois é mais facil eu decorar um comando pra cada coisa do que uma letrinha que muda designificado de um programa para outro um bom exemplo é o -i
bash -i # é interativo
já
ffmpeg -i # é input e exige um parametro
além do case -p
é diferente de -P
será que existe alguma dica de expert que ajude a decorar isso tudo? além de passar anos usando, afinal com tempo suficiente qualquer um decora!
outro detalhe: sou deficiente fisico e tenho certa dificuldade em digitar e por isso o echo read acaba sendo mais facil pra mim por isso só vou tirar o echo se for algo perigoso afinal o script vai ser pra uso pessoal mesmo e não vai prejudicar ninguem.
aproveitando se eu compartilhar um outro shell script que fiz na categoria ‘eu que fiz’ sabe se a galera de lá ajuda me a melhorar ele um pouco já esta funcional mas tem alguns detalhes faltando que eu não soube fazer
fico muito agradecido!
@Igor_Fernandes_Neves então, se você acha que o seu script pode ser de uso pra outras pessoas do fórum e está pronto o suficiente, tudo bem postar no “Eu que fiz”. Mas se não, acho que deve postar no “Avançado/Terminal” pedindo por ajuda