Existem vários problemas aqui. Primeiro, você não está salvando o nome como $name
. Você precisa read VARIABLE
para salvar a string digitada como $VARIABLE
. Você também não precisa do echo
, mas mais sobre isso depois.
Agora, o erro de sintaxe que você está recebendo é, presumivelmente, este:
% bl0ck_qu0te% Isso porque você está usando uma sintaxe muito errada. O grep
imprimirá a linha inteira, não apenas o número em megabytes. Portanto, você está realmente tentando verificar se uma linha como esta:
Length: 272629760 (260M)
é mais do que 250M
e isso não faz sentido. Além disso, a saída de wget --spider
é impressa no erro padrão, não na saída padrão, portanto, é necessário redirecioná-la para stdout para grep
it:
wget --spider $url 2>&1 | grep ...
Você também precisa filtrar tudo, exceto o número em si. Uma maneira de fazer isso é com uma lookahead positiva e -P
para expressões regulares compatíveis com Perl (PCRE) e -o
para informar grep
para imprimir apenas a parte correspondente da linha:
grep -oP '\d+(?=M)'
No PCRE, \d
significa qualquer dígito e +
significa "um ou mais". A construção (?=foo)
, a antecipação positiva, corresponderá somente se os próximos caracteres forem foo
. Assim, o regex acima corresponderá a um ou mais dígitos, seguido pela letra M
.
Portanto, uma versão funcional (e ligeiramente melhorada) do seu script seria:
#!/usr/bin/env bash
read -p "Name your file: " name
read -p "Paste the url you wish to check: " url
if (( $(wget --spider $url 2>&1 | grep -oP '\d+(?=M)') > 250 ));
then
wget -O $name $url
else
echo "This is not what you are looking for."
fi
Ou, para uma sintaxe mais compacta que faça o mesmo:
#!/usr/bin/env bash
read -p "Name your file: " name
read -p "Paste the url you wish to check: " url
(( $(wget --spider $url 2>&1 | grep -oP '\d+(?=M)') > 250 )) &&
wget -O $name $url || echo "This is not what you are looking for."