<Попередній | зміст | Наступна>
Відсутні або неочікувані токени
Іншою поширеною помилкою є забуття виконати складену команду, наприклад if or в той час як. Давайте подивимося, що станеться, якщо видалити крапку з комою після тест , if команда:
#! / бін / баш
# проблема: скрипт для демонстрації поширених помилок number=1
якщо [ $number = 1 ] то
echo "Число дорівнює 1." інше
echo "Число не дорівнює 1."
fi
#! / бін / баш
# проблема: скрипт для демонстрації поширених помилок number=1
якщо [ $number = 1 ] то
echo "Число дорівнює 1." інше
echo "Число не дорівнює 1."
fi
Результат такий:
[me@linuxbox ~]$ біда
/home/me/bin/trouble: рядок 9: синтаксична помилка біля неочікуваного маркера
`інше'
/home/me/bin/trouble: рядок 9: `Інше'
[me@linuxbox ~]$ біда
/home/me/bin/trouble: рядок 9: синтаксична помилка біля неочікуваного маркера
`інше'
/home/me/bin/trouble: рядок 9: `Інше'
Знову ж таки, повідомлення про помилку вказує на помилку, яка виникає пізніше, ніж фактична проблема. Те, що відбувається, дійсно досить цікаво. Як ми пам'ятаємо, if приймає список команд і оцінює код виходу останньої команди в списку. У нашій програмі ми плануємо, щоб цей список складався з однієї команди, [, синонім тесту. The [ команда приймає наступне за нею як список аргументів; у нашому випадку чотири аргументи: $ номер, 1, = та ]. Слово з вилученою крапкою з комою потім додається до списку аргументів, що є синтаксично законним. Наступні нудьгувати команда також законна. Це інтерпретується як інша команда в списку команд, які if оцінюватиме код виходу. The ще наступне зустрічається, але він недоречний, оскільки оболонка розпізнає його як a застережене слово (слово, яке має особливе значення для оболонки), а не назва команди, звідси й повідомлення про помилку.