Напишите сценарий оболочки, чтобы проверить, печатает ли программа C Hello World - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь написать сценарий оболочки для компиляции программы c и проверки, печатает ли она «Hello World!» на стандартный вывод Это то, что у меня сейчас. Вторым аргументом проверки в diff является файл только с «Hello World!»

#!/bin/sh
gcc -Wall hello.c -o hello
./hello > outfile
if diff outfile check >/dev/null ; then 
  echo Same
else
  echo Different
fi

Моя Ubuntu продолжает показывать эту ошибку после того, как я пытаюсь запустить скрипт.

"./build.sh: 8: ./build.sh: Syntax error: "fi" unexpected (expecting "then")"

Пожалуйста, дайте мне знать, что не так с моим кодом.

Ответы [ 3 ]

3 голосов
/ 04 февраля 2020

Как я уже сказал в комментарии, я подозреваю, что ваш файл скрипта имеет DOS / Windows окончания строк; см. этот вопрос .

Кроме того, поскольку выполняемое вами сравнение - это всего лишь одна строка, это легко сделать как сравнение строк (вместо сохранения строк в файлах и использования средство сравнения файлов, например diff или cmp):

#!/bin/sh
gcc -Wall hello.c -o hello
if [ "$(./hello)" = 'Hello World!' ]; then 
  echo Same
else
  echo Different
fi

Примечания: $( ) является «подстановкой команд»; он запускает содержимое как команду, захватывает его выходные данные и подставляет его в командную строку в этой точке. Двойные кавычки, которые предотвращают его разделение на «слова» (т. Е. «Hello» и «World!», Рассматриваются как отдельные слова) и вещи, похожие на символы подстановки имен файлов, расширяются в списки соответствующих файлов. (Вы должны почти всегда ставить двойные кавычки вокруг подстановок команд и переменных, потому что эти эффекты могут вызывать странные проблемы.)

0 голосов
/ 04 февраля 2020

Используйте cmp вместо diff в скриптах.

Самое простое, с использованием <(...) bash расширения:

if cmp -s <(./hello) <(echo "Hello world!"); then 
   echo Same
else
  echo Different
fi
0 голосов
/ 04 февраля 2020

Вы можете использовать программу cmp, чтобы проверить, соответствует ли ожидаемый файл вывода. Вот пример из моего тестового скрипта:

cmp "file.output" "file_cmp.output"

if [[ $? -eq 0 ]] ; then # this line checks if cmp exit value is 0 (everything is fine)
   echo "OK!"
else
   echo "ERROR!"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...