gpt4 book ai didi

linux - Bash 脚本问题检查命令输出

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:44 24 4
gpt4 key购买 nike

我有一个 bash 脚本,我想检查 Linux 命令的输出命令为:sudosupervisorctlstatus

正常输出如下:

0: tuxtunnel                        RUNNING   pid 563, uptime 11 days, 5:04:19
1: util_pkt_logger STOPPED Oct 11 01:20 PM
2: watchdog EXITED Oct 11 12:03 PM

我第一次尝试 bash 脚本,从命令中读取此输出并将每一行放入一个数组中,不幸的是,当我去检查此结果中是否包含字符串时,它似乎尝试将检查作为命令执行。我的脚本看起来像这样

    echo "its stopped"
x=$(sudo supervisorctl status)
SAVEIFS=$IFS
IFS=$'\n'
x=(${x})
IFS=$SAVEIFS
for(( i=0; i<${#x[@]}; i++ ))
do
echo "$i: ${x[$i]}"
if [$x[$i]] =~"STOPPED" #check if array contains this string
then
echo "its stopped"
fi
done


exit 0

当我尝试执行检查时,事情就会变得困惑,我是 bash 脚本的新手,因此任何帮助将不胜感激。我想看看该行是否包含“STOPPED”一词

最佳答案

不要将 supervisorctl 的整个输出读取到单个变量中,然后操作 IFS 变量来分解行,而是尝试一次读取一行。另外,不要在线路上的任何位置匹配 STOPPED,而只在状态列中查找它。

试试这个:

#!/bin/bash

while read line; do
echo ${line}
fields=( ${line} )
if [ ${fields[2]} == "STOPPED" ]; then
echo "It's stopped."
fi
done < $(sudo supervisorctl status)

关于linux - Bash 脚本问题检查命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58508898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com