首页 > 解决方案 > Bash - 从打印的 ls 创建一个变量

问题描述

我正在努力创建一个类似于 ps 的 bash 脚本。

我只是无法理解 bash 的工作原理以及如何使其工作。最糟糕的是,这是我什至不知道如何开始学习的第一语言,而来自大学的压力只会让事情变得更糟。

我的计划是:

  1. 创建一个while循环
  2. 通过“ls /proc”的所有内容
  3. 从找到的文件夹中创建一个变量,例如“folder=$(awk '{print $i}')”
  4. Printf 创建的变量和一些关于 if from /proc/i/status 的内容
  5. 如果碰巧不是整数,则结束 while 循环。

而我就是无法理解。当我开始学习一门新语言时,我面临着大量的问题并像往常一样用谷歌搜索它们并没有帮助解决任何问题。我对这项任务感到无助。我什至不知道我对这个问题的看法是否正确:(

标签: bash

解决方案


不需要或不想解析lsoutput。只需直接循环通配符即可。

for proc in /proc/*; do 
    pid=${proc#/proc/}
    case $pid in *[!0-9]*) break;; esac
    awk -v pid="pid" '{ printf "%i %s\n", pid, "stuff" }' $proc/status
done

您可能想要continue代替,break但是当扩展通配符时,shell 会按字母顺序排列命中,因此数字条目实际上将在其他条目之前分组。

参数扩展 在修剪掉任何前导匹配时${variable#pattern}产生 的值。还有修剪匹配模式的后缀,以及许多其他简单的字符串操作工具。variablepattern${variable%suffix}


推荐阅读