Существует несколько проблем с Вашим сценарием. Я перечислил тех, я нашел, но я не протестировал, могут быть другие.
for keyurl in $DATA; do …
разделения $DATA
в каждом пробеле, не в каждой новой строке. Таким образом в первом повторении, $DATA
будет Example
; затем Domains;www.example.com
, и так далее. Кроме того, каждое значение подвергается подстановочному расширению, поэтому если существует a *
в ключевом слове Вы могли бы видеть броские результаты в зависимости от файлов, существующих в текущем каталоге.
Вы - Тринг для обработки разделенных от новой строки данных. Простой путь
while read -r keyurl; do
…
done
Это разделяет добавление отступа от каждой строки, которая является, вероятно, не плохой вещью здесь. (Используйте IFS= read -r keyurl
если Вы хотите keyurl
содержать каждую строку точно.)
Ваши вызовы к awk
не работают, потому что Вы являетесь передающими $keyurl
как имя файла. Необходимо передать его как вход вместо этого. В то время как Вы в нем, всегда используйте двойные кавычки вокруг подстановок переменных (иначе, оболочка выполняет некоторые расширения на их значении). Я также рекомендую использовать $(…)
вместо `…`
; они - то же, кроме этого `…`
является трудным использовать, когда Вы хотите заключить вещи в кавычки внутри, тогда как синтаксис $(…)
интуитивно.
keyword=`echo "$keyurl" | awk -F ";" '{print $1}'`
url=`echo "$keyurl" | awk -F ";" '{print $2}'`
Существует лучший способ разделить переменную в первой точке с запятой: используйте встроенные конструкции оболочки для разделения префикса или суффикса от строки.
keyword=${keyurl%%;*} url=${keyurl#*;}
Но так как Ваши данные прибывают из read
встроенный и разделитель отдельный символ, можно использовать в своих интересах IFS
функция и непосредственно разделение Ваш вход, поскольку Вы читаете его.
while IFS=';' read -r keyword url; do …
При прибытии в завихрение и вызовы grep, обратите внимание поиск буквенного текста $keyword
, так как Вы использовали одинарные кавычки. Используйте двойные кавычки; обратите внимание, что ключевое слово будет интерпретироваться как основное регулярное выражение. Если Вы хотите, чтобы ключевое слово было интерпретировано как литеральная строка, передайте -F
опция к grep
. Необходимо также поместить -e
перед шаблоном, в случае, если ключевое слово начинается с символа -
(иначе ключевое слово было бы интерпретировано как опция к grep). Наконец по теме grep, -q
опция эквивалентна >/dev/null
. Также помните двойные кавычки вокруг $url
.
curl -silent "$url" | grep -Fqe "$keyword"
Можно сократиться if [ $? != 0 ]; then
часть путем помещения команды непосредственно там.
if curl -silent "$url" | grep -Fqe "$keyword"; then
Таким образом;
while IFS=';' read -r keyword url; do
if curl -silent "$url" | grep -Fqe "$keyword"; then
echo "Did not find $keyword on $url"
else
echo $url "Okay"
fi
done
Альтернатива должна переименовать файлы:
for FILE in Days/*
do
DAY=`cut --delimiter '_' --fields 1 ${FILE}`
MONTH=`cut --delimiter '_' --fields 2 ${FILE} | cut --delimiter '.' --fields 1
NEWFILE=${MONTH}_${DAY}.tex
cp ${FILE} ${NEWFILE}
done
или Вы могли использовать touch
команда так, чтобы ls -1t
работал бы.