Я хотел бы, чтобы это искало файл и если это по 250M, затем загружают его. Если не не загружают его.
echo "Name your file."
read
echo "Paste the url you wish to check below."
read url
if (( wget --spider $url | grep *M >= 250M ));
then wget -O $name $url
else echo "This is not what you are looking for."
fi
Здесь существуют различные проблемы. Во-первых, Вы на самом деле не сохраняете имя как $name
. Вы nead read VARIABLE
сохранить вводимую строку как $VARIABLE
. Вам также не нужно echo
но больше на этом позже.
Теперь, синтаксическая ошибка, которую Вы получаете, является, по-видимому, этим:
строка 6: ((: wget - паук http://example.com | grep *M> = 250M: синтаксическая ошибка в выражении (ошибочный маркер является "пауком http://example.com | grep *M> = 250M"),
Поэтому Вы используете очень неправильный синтаксис. grep
распечатает всю строку, не только число на мегабайтах. Поэтому Вы на самом деле пытаетесь проверить ли строка как это:
Length: 272629760 (260M)
больше, чем 250M
и это не имеет никакого смысла. Кроме того, вывод wget --spider
печатается к стандартной погрешности, не стандартному выводу, таким образом, необходимо перенаправить его к stdout чтобы к grep
это:
wget --spider $url 2>&1 | grep ...
Также необходимо отфильтровать все кроме самого числа. Один способ сделать это с положительным предвидением, и -P
для Perl совместимых регулярных выражений (PCRE) и -o
сказать grep
только распечатать часть соответствия строки:
grep -oP '\d+(?=M)'
В PCRE, \d
средства любая цифра и +
означает "один или несколько". (?=foo)
создайте, положительное предвидение, будет только соответствовать, если следующие символы будут foo
. Так, regex выше будет соответствовать одной или нескольким цифрам, сопровождаемым буквой M
.
Так, работа (и немного улучшенный) версия Вашего сценария была бы:
#!/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
Или, для более компактного синтаксиса, который делает то же самое:
#!/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."