使用 bash 脚本在日志文件中搜索字符串

the*_*lie 4 string bash grep

我刚开始学习PHP。我正在关注phpacademy 的教程,我会推荐给任何人。无论如何,我正在使用 XAMPP 来测试我的脚本。我正在尝试编写一个 bash 脚本,该脚本将启动 XAMPP,然后在找到特定字符串“XAMPP for Linux started.”时打开 firefox 到本地主机页面,该字符串已从终端重定向到文件 xampp.log。我在搜索文件时遇到问题。我不断收到:

grep: for: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我知道该文件存在,我认为我的语法是错误的。这是我到目前为止所得到的:

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
Run Code Online (Sandbox Code Playgroud)

Rol*_*lig 5

在 shell 脚本中,您不应该编写$variable,因为这会对变量的值进行字扩展。在您的情况下,它会产生四个字。

始终在变量周围使用引号,如下所示:

grep -e "$string" file...
Run Code Online (Sandbox Code Playgroud)

-e当字符串可能以破折号开头并且字符串周围的引号将其保留为一个单词时,这是必需的。

顺便说一句:当你编写 shell 程序时,第一行应该是set -eu. 这将启用 * e *rror 检查并检查 * u *n 定义的变量,这对您的情况很有用。有关更多详细信息,请阅读 Bash 手册。