Онлайн робочі станції OnWorks Linux та Windows

логотип

Безкоштовний онлайн-хостинг для робочих станцій

<Попередній | зміст | Наступна>

Непередбачувані розширення

Можливі помилки, які лише періодично виникають у сценарії. Іноді сценарій буде працювати нормально, а іноді він зазнає невдачі через результати розширення. Якщо ми повернемо нашу пропущену крапку з комою та змінимо значення номер до порожньої змінної ми


може продемонструвати:



#! / бін / баш


# проблема: скрипт для демонстрації поширених помилок


число=


якщо [ $число = 1 ]; тоді

echo "Число дорівнює 1." інше

echo "Число не дорівнює 1."

fi

#! / бін / баш


# проблема: скрипт для демонстрації поширених помилок


число=


якщо [ $число = 1 ]; тоді

echo "Число дорівнює 1." інше

echo "Число не дорівнює 1."

fi


Запуск сценарію з цією зміною призводить до виходу:



[me@linuxbox ~]$ біда

/home/me/bin/trouble: рядок 7: [: =: очікуваний унарний оператор Число не дорівнює 1.

[me@linuxbox ~]$ біда

/home/me/bin/trouble: рядок 7: [: =: очікуваний унарний оператор Число не дорівнює 1.


Ми отримуємо це досить загадкове повідомлення про помилку, за яким слідує другий вихід нудьгувати команда. Проблема полягає в розширенні номер змінна всередині тест наказ. Коли команда:



[ $число = 1 ]

[ $число = 1 ]


зазнає розширення с номер будучи порожнім, результат такий:


[ = 1 ]

[ = 1 ]


який є недійсним і генерується помилка. The = оператор є двійковим оператором (він вимагає значення з кожного боку), але перше значення відсутнє, тому тест команда очікує унарного оператора (наприклад -z) замість цього. Далі, оскільки тест не вдалося (через помилку), the if команда отримує ненульовий код виходу і діє відповідно, а друга нудьгувати команда виконується.

Цю проблему можна виправити, додавши лапки навколо першого аргументу в тест

команда:


[ "$number" = 1 ]

[ "$number" = 1 ]


Тоді, коли відбудеться розширення, результат буде таким:



[ "" = 1 ]

[ "" = 1 ]


що дає правильну кількість аргументів. На додаток до порожніх рядків, лапки слід використовувати в тих випадках, коли значення може розгорнутися в рядки з кількох слів, як у випадку з іменами файлів, які містять вбудовані пробіли.


Найпопулярніші хмарні обчислення ОС на OnWorks: