【问题标题】:Bash IP IF THEN ELSE StatementBash IP IF THEN ELSE 语句
【发布时间】:2011-10-18 15:22:24
【问题描述】:

我需要从多台机器上运行一个脚本,但每台机器都需要执行独特的命令。

我认为 bash 脚本可以做到这一点,但我对这个部门不太了解。

我需要的代码看起来类似于下面的代码(或者会)。我知道它远非完美或实用,但它确实只是为了帮助表达我正在寻找的东西。

有人可以帮我写这个脚本吗?

#/bin/bash
IP= ifconfig eth0 | grep inet | grep -v inet6 | cut -c 7-17 

If [$IP -eq 192.168.32.1]
then mkdir IPFolder-1
more code...
else
if [$IP -eq 192.168.32.2]
then mkdir IPFolder-2
more code...
else
if [$IP -eq 192.168.32.5]
then mkdir IPFolder-5
more code...

【问题讨论】:

  • 我不确定你的问题是什么。每个盒子的执行步骤是否完全不同?它们是具有不同路径、名称等的相同命令吗?您开始编写的脚本是否遇到了一些特定问题?
  • “帮助”如何?你要我们做什么?你的问题是什么?我们应该如何从您自己承认并不能准确代表它们的脚本中推断出您的意图?
  • 这可能是一种更简单的获取IP的方法:ifconfig eth0 | grep -oP '(?<=inet addr:)[0-9.]+'

标签: linux bash unix scripting grep


【解决方案1】:

使用双括号,空格很重要:

IP=$(ifconfig eth0 | grep inet | grep -v inet6 | cut -c 21-34)
if [[ $IP = 192.168.32.1 ]]; then
  mkdir IPFolder-1
elif [[ $IP = 192.168.32.2 ]]; then
  mkdir IPFolder-2
fi

注意:在 Ubuntu 11.10 上,我必须使用 cut -c 21-34,根据需要进行调整。

【讨论】:

  • 谢谢山姆!这正是我想要的。
  • 获取地址的更简单(更可靠)的方法是安装ifdata 并使用ifdata -pa eth0
【解决方案2】:

小心,ifconfig 是本地化的,也许这就是 Sam 必须削减 21-34 而不是 7-17 的原因。

使用LANG= ifconfig 可以在任何地方使用英文。

看来ifconfig have other quirks知道了。

(应该是评论而不是答案,但我还不能评论。)

【讨论】: