bash - Bash - 从打印的 ls 创建一个变量
问题描述
我正在努力创建一个类似于 ps 的 bash 脚本。
我只是无法理解 bash 的工作原理以及如何使其工作。最糟糕的是,这是我什至不知道如何开始学习的第一语言,而来自大学的压力只会让事情变得更糟。
我的计划是:
- 创建一个while循环
- 通过“ls /proc”的所有内容
- 从找到的文件夹中创建一个变量,例如“folder=$(awk '{print $i}')”
- Printf 创建的变量和一些关于 if from /proc/i/status 的内容
- 如果碰巧不是整数,则结束 while 循环。
而我就是无法理解。当我开始学习一门新语言时,我面临着大量的问题并像往常一样用谷歌搜索它们并没有帮助解决任何问题。我对这项任务感到无助。我什至不知道我对这个问题的看法是否正确:(
解决方案
您不需要或不想解析ls
output。只需直接循环通配符即可。
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}
产生 的值。还有修剪匹配模式的后缀,以及许多其他简单的字符串操作工具。variable
pattern
${variable%suffix}
推荐阅读
- java - Java Servlet - 错误 404 未找到所需资源 - 我找不到错误
- javascript - SpeechRecognition 在 Android/Mobile Chrome 上不起作用,但在桌面上起作用?
- c++ - C++ 需要帮助修复以获得所需的输出
- laravel - 如何从 eloquent 调用中访问多个模型数据
- node.js - 无法在我的 Mac 上安装 NVM。不断卷曲:(7)无法连接到服务器
- r - 我怎样才能放弃obs。有条件地到另一个数据框?R
- c - Rules for upconverting/downconverting types
- phoenix-framework - 如何在不破坏现有样式的情况下将 tailwindcss 添加到我的 Phoenix 项目中?
- python - 如何创建一个真正的 Python 程序
- flutter - “flutter on the web”appbar的标题只显示图片,但是浏览器标签很烦