[英]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 行結尾; 看到這個問題。
此外,由於您進行的比較只是一行,因此很容易作為字符串比較(而不是將字符串保存到文件,並使用文件比較器,如diff
或cmp
):
#!/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.