Мой bash-скрипт не работает так, как я хочу:
#!/bin/bash
total="0"
count="0"
#FILE="$1" This is the easier way
for FILE in $*
do
# Start processing all processable files
while read line
do
if [[ "$line" =~ ^Total ]];
then
tmp=$(echo $line | cut -d':' -f2)
count=$(expr $count + 1)
total=$(expr $total + $tmp)
fi
done < $FILE
done
echo "The Total Is: $total"
echo "$FILE"
Есть ли другой способ изменить этот скрипт так, чтобы он считывал аргументы в $1
вместо $FILE
? Я пытался использовать цикл while
:
while [ $1 != "" ]
do ....
done
Также, когда я реализую это, код повторяется. Есть ли способ исправить это?
Другая проблема, с которой я сталкиваюсь, заключается в том, что когда у меня несколько файлов hi*.txt
, это дает мне дубликаты. Зачем? У меня есть файлы типа hi1.txt
hi1.txt~
, но файл тильды имеет 0 байт, поэтому мой сценарий не должен ничего искать.
То, что у меня есть, хорошо, но может быть улучшено. Я ценю ваши предложения по awk, но в настоящее время я не программист Unix.
Strager: файлы, которые генерирует мой текстовый редактор, автоматически не содержат ничего ... он имеет 0 байтов ... Но да, я пошел дальше и удалил их просто для уверенности. Но нет, мой сценарий на самом деле читает все дважды. Я полагаю, он снова зацикливается, когда это действительно не нужно. Я пытался заставить замолчать это действие с помощью команд выхода. Но не удалось.
while [ "$1" != "" ]; do
# Code here
# Next argument
shift
done
Этот код довольно приятный, но я указываю все возможные команды одновременно. Пример: привет [145] .txt
При наличии будет читать все три файла одновременно.
Предположим, пользователь вводит привет * .txt;
Затем я дважды читаю все свои привет-файлы и затем снова добавляю.
Как я могу кодировать его так, чтобы он считывал мои файлы (только один раз) по спецификации hi * .txt?
Я действительно думаю, что это из-за отсутствия $ 1.