Синтаксическая ошибка рядом с неожиданным токеном `}'
Я пишу программу с некоторыми случайными тестами, которые просит мой брат. Но когда я закончил писать, я начал тестировать и вот результат:
./benchmarksuite.sh: line 45: syntax error near unexpected token `}'
./benchmarksuite.sh: line 45: `}'
Так что в мире не так с моим кодом?
Вот код:
#!/bin/bash
drivetest()
{
echo "How much data do you want to write (in MiB):"
read data
echo "Are you sure you want to perform a $data MiB write onto your disk?[Y/N]"
read confirm
if [ "$confirm" == "Y" ]; then
dd bs=1M count=$data if=/dev/zero of=test conv=fdatasync
elif [ "$verify" == "y" ]; then
dd bs=1M count=$data if=/dev/zero of=test conv=fdatasync
else
echo "Exiting the test."
fi
stresstest()
{
echo "How long is your stress(tips: Use letters along numbers like s,m,h. If you type number with OUT letter, default as second):"
read time
echo "How many CPU workers do you want?"
read cpu_worker
sudo stress --cpu $cpu_worker --timeout $time
echo ""
echo -e "${yellow}Thermal results:${res}"
sensors
}
random()
{
echo " MENU "
echo "Type 1 for a drive test. "
echo "Type 2 for a stress test. "
echo "Type 3 to perform all tests."
echo "Type other stuffs to exit. "
read value
if [ "$value" == "1" ]; then
drivetest
if [ "$value" == "2" ]; then
stresstest
if [ "$value" == "3" ]; then
{
drivetest
stresstest
}
}
yellow='\033[1;33m'
res='\033[0m'
echo -e "${yellow}Warning:${res}"
echo -e "${yellow}This script is depended on stress-ng and lm-sensors. Please be sure that you have those package installed.${res}"
echo "Verify [Y/N]:"
read verify
if [ "$verify" == "Y" ]; then
random
elif [ "$verify" == "y" ]; then
random
else
echo -e "${yellow}Please install the dependencies.${res}"
fi
1 ответ
Так что в мире не так с моим кодом?
Для проверки ваших сценариев оболочки вы можете использовать ShellCheck. Вот результат проверки вашего кода:
Вам не хватает нескольких
fi
s.Добавление
fi
s генерирует новую ошибку:drivetest()
кажется, отсутствует пропуск}
Исправление этого оставляет вам несколько предупреждений (которые я оставлю для вас, чтобы исправить):
Исправленный код:
#!/bin/bash
drivetest()
{
echo "How much data do you want to write (in MiB):"
read data
echo "Are you sure you want to perform a $data MiB write onto your disk?[Y/N]"
read confirm
if [ "$confirm" == "Y" ]; then
dd bs=1M count=$data if=/dev/zero of=test conv=fdatasync
elif [ "$verify" == "y" ]; then
dd bs=1M count=$data if=/dev/zero of=test conv=fdatasync
else
echo "Exiting the test."
fi
}
stresstest()
{
echo "How long is your stress(tips: Use letters along numbers like s,m,h. If you type number with OUT letter, default as second):"
read time
echo "How many CPU workers do you want?"
read cpu_worker
sudo stress --cpu $cpu_worker --timeout $time
echo ""
echo -e "${yellow}Thermal results:${res}"
sensors
}
random()
{
echo " MENU "
echo "Type 1 for a drive test. "
echo "Type 2 for a stress test. "
echo "Type 3 to perform all tests."
echo "Type other stuffs to exit. "
read value
if [ "$value" == "1" ]; then
drivetest
fi
if [ "$value" == "2" ]; then
stresstest
fi
if [ "$value" == "3" ]; then
{
drivetest
stresstest
}
fi
}
yellow='\033[1;33m'
res='\033[0m'
echo -e "${yellow}Warning:${res}"
echo -e "${yellow}This script is depended on stress-ng and lm-sensors. Please be sure that you have those package installed.${res}"
echo "Verify [Y/N]:"
read verify
if [ "$verify" == "Y" ]; then
random
elif [ "$verify" == "y" ]; then
random
else
echo -e "${yellow}Please install the dependencies.${res}"
fi
ShellCheck - инструмент статического анализа сценария оболочки
ShellCheck - это инструмент GPLv3, который выдает предупреждения и предложения для сценариев оболочки bash / sh:
Снимок экрана терминала, на котором показаны проблемные строки сценария оболочки.
Цели ShellCheck:
Чтобы указать и прояснить типичные проблемы синтаксиса новичка, которые заставляют оболочку выдавать загадочные сообщения об ошибках.
Указать и прояснить типичные семантические проблемы промежуточного уровня, которые заставляют оболочку вести себя странно и нелогично.
Чтобы указать на тонкие предостережения, угловые случаи и ловушки, которые могут привести к сбою в противном случае работающего сценария опытного пользователя в будущем.
Source ShellCheck