Я реализовал скрипт bash, который работает с существующим текстовым файлом, расположенным в том же рабочем каталоге скрипта. Скрипт принимает имя файла для вычисления через параметр функции.
Проблема в том, что когда я запускаю скрипт, он не находит файл. Я уже проверил позиционный параметр функции при вызове, и имя файла правильное. Но проверка этого имени файла «[-e filename]» или команды, запущенной для него (например, имя файла cat), возвращает ошибку. Имя файла не найдено.
Я вставляю свой сценарий ..
#!/bin/bash
query=
loan=
function count(){
local valore=0
local wordcmp
TMPFILE=$(mktemp)
if [ -n "$query" ]; then
wordcmp=$query
else wordcmp=$loan
fi
echo $1 (here print the correct file name passed by the caller)
for FILE; do
if [ -e $FILE ]; then
cat $FILE | grep $wordcmp > $TMPFILE
exec 3< $TMPFILE
while read -u 3 line; do
valore=$(($valore + ${line#$wordcmp}))
done
exec 3>&-
echo "$wordcmp $valore"
echo "Bye."
else
echo "$0: error --- log file $FILE not found" 1>&2
fi
valore=0
done
}
set -- `getopt -o "h" -l "query,loan" -- "$@"`
while true; do
case "$1" in
--query) query=QUERY
shift;;
--loan) loan=LOAN
shift;;
-h) echo "$0: help" 1>&2
echo "usage: $0 --query logfile for query summary" 1>&2
echo "usage: $0 --loan logfile for loan summary" 1>&2
echo "usage: $0 -h for this help message" 1>&2
exit 1;;
--) shift
break;;
esac
done
if [ -z "$query" -a -z "$loan" ]; then
echo "$0: you must specify at least one option and log file(s)" 1>&2
echo "please type $0 -h for help" 1>&2
exit 1
fi
if [ $# = 0 ]; then
echo "$0: you must specify at least one log file" 1>&2
echo "please type $0 -h for help" 1>&2
exit 1
shift
fi
count $@
Вывод при вызове myscript --query filename.log
"./myscript.sh: error --- файл журнала 'filename.log' не найден"
(но файл «filename.log» существует в локальном каталоге при запуске скрипта)
Любая идея?
Спасибо всем