Existe um fi
que não deveria existir na linha 114. O código correto seria este:
#!/bin/bash
# Bucket brigade - brigade script
# The user defines a fire
# The user defines number of passers
# Then passers extinguish the fire
if [[ "" = *[!0-9]* ]]; then
echo "The second argument may only contain digits"
exit
fi
# must be empty or contain only digits to pass this point
case "" in
fire)
if [ -z "" ]; then
echo Please provide a fire size
echo 'exe: brig fire 10'
else
echo "" > .fire.size
echo "A fire of intensity has started"
fi
;;
alarm)
rm .report.pas.* 2> /dev/null
if [ -z "" ]; then
echo Please provide the number of passers
echo 'exe: brig alarm 5'
elif [ "" -lt 2 ]; then
echo "There needs to be more than one passer"
else
passvar=""
export totalpass=""
#passers check exported variable to see if they are high number
touch .keep.passing
echo "$totalpass Passers have been activated"
while [ "$passvar" -gt 0 ]; do
bash passer "$passvar" &
((passvar--))
done
fi
;;
status)
firenow=0
clear
echo "Report of situation as of"
echo $(date)
if [ -e .fire.size ]; then
firenow=$(cat .fire.size)
fi
if [ "$firenow" -gt 0 ]; then
echo "The fire is blazing with $firenow intensity"
else
echo "No fire is active"
fi
if [ -e .keep.passing ]; then
touch .passers.pause
sleep 3
ls | grep bucket. > .current.buckets
cat bucket.* > .bucket.contents
echo "The current active buckets and contents:"
paste .current.buckets .bucket.contents | tr '\t' '\n'
rm .current.buckets
rm .bucket.contents
rm .passers.pause
else
echo "There are no buckets currently active"
fi
;;
quit)
rm .keep.passing 2> /dev/null
sleep 1
rm .fire.size 2> /dev/null
rm bucket.* 2> /dev/null
if [ -e .report.pas.1 ]; then
cat .report.pas.* >> .unified.report
# This is the wrong "fi" ######################################## ;-)
clear
echo 'Generating Report for this session'
sleep 3
cat .unified.report | more
else
echo "No reports exist at this time"
fi
;;
*)
echo 'Usage: brig [fire (n)|alarm (n)|status|report|quit]'
esac
Note que indentifiquei o seu código. Pessoalmente, posso dar algumas recomendações:
-
Por favor, pelo amor de Deus! não coloque ponto e vírgula e, em seguida, novas linhas! ;-) Se você quer fazer uma boa condicional, escolha um destes exemplos:
-
then
na mesma linha:if [ "my coding style" == "can be improved" ]; then echo "I accept suggestions ;-)" fi
-
then
em uma linha separada:if [ "my coding style" == "can be improved" ] then echo "I accept suggestions ;-)" fi
-
-
Eu não sei porque você está dividindo comentários curtos sobre várias linhas, eu não faço isso.
- Por favor, indente seu código 2, 4 ou 8 espaços (eu recomendaria 4).
- Não durma 3 segundos enquanto não estiver fazendo nada.
Desculpe se cometi algum erro, o inglês não é minha língua materna.
Espero que ajude.