Обучение bash скриптов в Linux на VirtualBox.Bash while loop `done 'синтаксическая ошибка неожиданный токен
Я пишу сценарий, который использует цикл while, чтобы спросить, в каком текстовом файле писать, если вы решите не перезаписывать существующий файл, между прочим.
Вот мой код:
#!/bin/bash
bool="true"
counter="true"
while [ "${bool}" == "true" ] ; do
bool="false"
if [ "${counter}" == "true" ] ; then
if [ $# -eq 1 ] ; then
ff=$1
fi
else
read -p "Enter the .txt file you would like to write to: " ff
fi
txt=".txt"
if [[ $ff != *$txt* ]] ; then
echo $ff
ff="$ff$txt"
echo $ff
fi
if [ -w $ff ] ; then
var="true"
while [ "${var}" == "true" ] ; do
var="false"
read -p "${ff} already exists. Do you want to overwrite it? y/n: " yorn
if [ $yorn == "y" ] ; then
echo "'$ff' is being overwitten"
elif [ $yorn == "n" ] ; then
echo "Let's try this again..."
bool="true"
else
echo "You entered a command other than y or n."
var="true"
fi
done
else
echo "'$ff' has been created"
fi
counter="false"
done
echo "Writing to ${ff}..."
echo "${ff}" > $ff
echo "" >> $ff
declare -a alphabet=("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z")
echo ${alphabet[@]}
letters=${#alphabet[@]}
echo "There are ${letters} letters in the alphabet"
loops=$((letters*letters*letters))
echo "The script loops ${loops} times"
start=$(date +%s.%N)
for x in "${alphabet[@]}"
do
x=$x$x
for y in "${alphabet[@]}"
do
y=$y$y
for z in "${alphabet[@]}"
do
z=$z$z
xyz=$x$y$z
grep $xyz /usr/share/dict/words >> $ff
done
done
done
end=$(date +%s.%N)
elapsed=$(echo "$end - $start" | bc -l)
echo "The search took ${elapsed} seconds."
sleep 10s
emacs $ff
exit 0
Вот моя ошибка за сделанное из цикла в то время как:
[email protected]:~/scripts$ ./script.sh abc
./script.sh: line 35: syntax error near unexpected token `done'
./script.sh: line 35: `done'
Что вопрос здесь?
Попробуйте [shellcheck] (http://www.shellcheck.net) –
- это ваш отступ, как это, в вашем реальном файле? Есть несколько блоков, которые было бы легче читать, если бы они были отступом. –
вам не хватает ** fi ** после эха "'$ ff' был создан" fi – Mircea