Мой Баш скрипт не работает так, как я хочу, чтобы это:Как я могу заставить свой скрипт 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
Этот код довольно милый, но я указываю все возможные команды за один раз. Пример: hi [145] .txt Если в нем будут отображаться все три файла одновременно. Предположим, что пользователь вводит hi * .txt; Затем я получаю все мои привет файлы дважды, а затем добавил еще раз.
Как я могу закодировать его так, чтобы он читал мои файлы (только один раз) по спецификации hi * .txt? Я действительно думаю, что это из-за отсутствия 1 доллара.
Пожалуйста, отформатируйте код немного лучше. Выделите все это и нажмите кнопку маленького кода или, по крайней мере, убедитесь, что в нем имеются четыре пробела. – Dustin 2008-11-29 00:28:00