2011-09-17 52 views
4

我剛開始學習PHP。我遵循phpacademy's教程,我會推薦給任何人。無論如何,我使用XAMPP來測試我的腳本。我試圖編寫一個bash腳本來啓動XAMPP,然後如果它找到一個特定的字符串「XAMPP for Linux started」,然後打開firefox到本地主頁,它已經從終端重定向到文件xampp.log。我在搜索文件時遇到問題。我一直得到一個:用bash腳本搜索字符串的日誌文件

grep: for: No such file or directory 

我知道文件存在,我認爲我的語法是錯誤的。這是我到目前爲止有:

loaded=$false 
string="XAMPP for Linux started." 

echo "Starting Xampp..." 

sudo /opt/lampp/lampp start 2>&1 > ~/Documents/xampp.log 

sleep 15 

if grep -q $string ~/Documents/xampp.log; then 

    $loaded=$true 
    echo -e "\nXampp successfully started!" 

fi 

if [$loaded -eq $true]; then 

    echo -e "Opening localhost..." 
    firefox "http://localhost/" 

else 

    echo -e "\nXampp failed to start." 
    echo -e "\nHere's what went wrong:\n" 
    cat ~/Documents/xampp.log 

fi 
+0

用於調試,'set -vx'或將shebang更改爲'#!/ bin/bash -x'的標準技巧,並檢查是否所有內容都已擴展爲exxpected –

回答

4

在shell腳本,你不應該寫$variable,因爲這將做變量的值單詞擴展。在你的情況下,它會產生四個詞。

始終使用引號中的變量,就像這樣:

grep -e "$string" file... 

-e是必要的,當串威力以短劃線開始,字符串周圍的引號把它作爲一個字。順便說一下:當你編寫shell程序時,第一行應該是set -eu。這使* e *錯誤檢查和檢查* ü * ndefined變量,這將是有用的你的情況。有關更多詳細信息,請閱讀Bash手冊。

+0

工作,謝謝! – thecakeisalie

1

你正在尋找一個字符串,你應該把你的報價。
嘗試"$string"代替$string

+0

也謝謝。你們都是對的! – thecakeisalie

1

有幾個問題:

  • 引用變量,如果你想通過他們作爲一個簡單的參數"$string"
  • 沒有$true$false
  • 慶典做可變擴展,它會在執行命令之前用它們的值替換變量名稱。 $loaded=$true應該是loaded=true.
  • 您需要空格並在if中通常加上引號:if [$loaded -eq $true]if [ "$loaded" -eq true ]。在這種情況下,變量被設置爲不會引起問題,但通常不會依賴於此。
+0

是不是'測試foo -eq酒吧'意味着做一個*數字*比較? –

+0

好點。它是..也許他將$ true定義爲1 ..天知道.. –

相關問題