簡體   English   中英

編寫一個 Shell 腳本來檢查 C 程序是否打印 Hello World

[英]Write a Shell script to check if a C program print Hello World

我正在嘗試編寫一個 Shell 腳本來編譯 ac 程序並檢查它是否打印“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")"

請讓我知道我的代碼有什么問題。

正如我在評論中所說,我懷疑您的腳本文件有 DOS/Windows 行結尾; 看到這個問題

此外,由於您進行的比較只是一行,因此很容易作為字符串比較(而不是將字符串保存到文件,並使用文件比較器,如diffcmp ):

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

注意: $( )是“命令替換”; 它將內容作為命令運行,捕獲其輸出,然后將其替換到命令行中。 周圍的雙引號防止它被分成“單詞”(即“Hello”和“World!”被視為單獨的單詞)和看起來像文件名通配符的東西被擴展為匹配文件的列表。 (你應該幾乎總是在命令和變量替換周圍加上雙引號,因為這些影響往往會導致奇怪的問題。)

您可以使用 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

在腳本中使用cmp而不是diff

最簡單的,使用<(...) bash 擴展名:

if cmp -s <(./hello) <(echo "Hello world!"); then 
   echo Same
else
  echo Different
fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM