【问题标题】:Problems comparing strings (BASH)比较字符串的问题 (BASH)
【发布时间】:2015-10-03 23:28:09
【问题描述】:

我正在尝试比较 2 个字符串。一个来自通过 grep 命令的文件,另一个永远不会改变,因为我总是将它与我​​在读取文件文本时创建的文件进行比较。如果它们相等,程序应该打印与新字符串包含的内容相关的数据。我已经尝试了 bash 允许的所有语法(因为我是 bash 的新手),但它并没有像我预期的那样工作。看起来第二个 if 不起作用,因为我之前没有尝试过,只打印字符串 (echo $text) 并且它起作用了,但不是我正在做的练习所要求的正确方法。我必须在控制台中只显示正在运行的进程的 pid 和状态。

cd
cd /proc
run="State: S (sleeping)"
for i in $( ls -d */); 
do
    cd $i
    if [ -f /proc/$i/status ];
        then    text="`grep -w "S" status`"
             if [ "$text" == "$run" ]
                then grep -w "Pid" status
                     grep -w "State" status
             fi
             cd /proc
        else cd /proc
    fi
done
;;

【问题讨论】:

  • 运行一个(部分)脚本执行cd somewhere 然后运行另一个cd back.to.where.it.started 作为子shell 通常更简单,它只是更改到目标目录并退出。最初的cd$HOME 也有点毫无意义。检查/proc/$i/status 然后读取./status 很有趣,尽管它实际上是同一个文件。此外,处理来自ls 的输出是一个令人担忧的过程——通常要小心,尽管在这个例子中它可能相当安全。

标签: linux string bash if-statement string-comparison


【解决方案1】:

您的run 变量包含State:<space>S (sleeping),但/proc/<pid>/status 文件包含State:<tab>S (sleeping)(至少在我的系统上)。所以你应该用制表符替换那个空格字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 2015-08-30
    • 2012-03-02
    • 1970-01-01
    • 2019-05-04
    • 2017-09-18
    • 1970-01-01
    相关资源
    最近更新 更多