希望这个问题不是太笼统。我对 shell 脚本很陌生,我来自计算机体系结构/非脚本编程背景。我在我工作的脚本中注意到,很少通过围绕整个脚本创建子 shell 来编写脚本。在我正在编写的脚本中,当我可以用一个子 shell 包围它时,我就是这样,因为它可以防止它与调用我的其他脚本混淆(以防万一)。由于与此方法相关的一些开销,这不是一种常见做法吗?我很难在网上找到这个。
例子:
#!/bin/bash
( #Start of subshell
echo "Some stuff here"
) #End of subshell
Run Code Online (Sandbox Code Playgroud) 我有一个返回以下内容的命令:
id1="172" id2="17" id3="136" id4="5" id5="0" />
id1="172" id2="17" id3="128" id4="2" id5="0" />
id1="172" id2="17" id3="128" id4="4" id5="0" />
id1="172" id2="17" id3="128" id4="6" id5="0" />
Run Code Online (Sandbox Code Playgroud)
组合的前四个 ID 代表一个 IP 地址(例如172.17.136.5第一行)。
我想将上述内容通过管道传递给解析命令,该命令将输出一个字符串,其中所有 IP 地址以空格分隔。
对于上面的例子:
myVariable="172.17.136.5 172.17.128.2 172.17.128.4 172.17.128.6"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个在 fedora 22 上运行的脚本,在那里我正在重新启动服务网络作为故障排除调用的一部分service network restart。我想检查该命令是否需要太长时间才能执行。如果时间太长,我想输出一条消息“重新启动网络服务时出错”。否则我想继续脚本。
我想找到一种简单的方法来提取字符串的一部分,直到第一个数字出现的位置(可能使用正则表达式而不是逐个字符遍历字符串)。我正在使用它来从rpm -qa没有版本的情况下提取包名称。例如:
Parsing: perl-Text-ParseWords-3.30-1.fc22.i686
Result: perl-Text-ParseWords
Run Code Online (Sandbox Code Playgroud) 我想从包名中只提取包的版本。假设我有一个var包含包名称的变量(例如:)var="nfs-utils-1.2.6-6.fc17.i686.rpm"。提取的字符串将是1.2.6-6. 用于解析的方法可以是任何东西(regex、awk、cut)。
编辑:在上面的例子中,我实际上想提取 1.2.6
bash ×5
shell-script ×4
fedora ×2
linux ×1
networking ×1
performance ×1
rpm ×1
services ×1
string ×1
subshell ×1
version ×1