用Go代码调用Linux命令

写在前面

在写go程序时,有时需要在Linux中使用某些命令行实现一些配置和功能。但是手动配置又过于麻烦,这时就可以用go中的exec包。里面的Command()方法可以实现用go代码调用Linux命令行并执行。

使用方法

调用单个普通命令

package main
 
import (
    "bytes"
    "fmt"
    "os/exec"
)
 
func main() {
    cmd := exec.Command("ls")
    var out bytes.Buffer
    cmd.Stdout = &out
    err := cmd.Run()
    if err != nil {
        fmt.Println("命令执行出错:", err)
        return
    }
    fmt.Println("命令输出:\n", out.String())
}

这个示例调用了 Linux中的 ls 命令,效果图如下:

在这里插入图片描述
可以看到,命令输出的结果与手动输出的结果相同。

调用多行命令

package main
 
import (
    "bytes"
    "fmt"
    "os/exec"
)
 
func main() {
    // 多行命令,使用分号分隔
    multiLineCommand := `echo "Hello"; echo "World"`
 
    // 执行命令
    cmd := exec.Command("sh", "-c", multiLineCommand)
 
    // 创建buffer来捕获标准输出
    var out bytes.Buffer
    cmd.Stdout = &out
 
    // 运行命令
    err := cmd.Run()
    if err != nil {
        fmt.Println("命令执行出错:", err)
        return
    }
 
    // 打印输出结果
    fmt.Println("命令输出:", out.String())
}

上面代码执行了 echo “hello” 与 echo “world” 两个命令,效果图如下:
在这里插入图片描述
可以看到代码输出结果相当于执行了两条Linux命令。

进阶用法

下面展示一下批量执行带参数输入的Linux命令的例子。

package main                                                                                                                                                                                                                                              
  import (
      "bytes"
      "fmt"
      "os/exec"
  )
 
  func main() {
      var int_strings = []string{"1", "2", "3", "4", "5"}
      var addr_strings = []string{"192.168.1.1/24", "192.168.1.2/24", "192.168.1.3/24", "192.168.1.4/24", "192.168.1.5/24"}
 
      multiLineCommand := ""
      for key, value := range int_strings {
          multiLineCommand += fmt.Sprintf("ip link add name %v type dummy;", value)
          multiLineCommand += fmt.Sprintf("ip addr add %v dev %v;", addr_strings[key], value)
          multiLineCommand += fmt.Sprintf("ip link set %v up;", value)
      }
      multiLineCommand = "`" + multiLineCommand + "`"
      fmt.Printf("multiLineCommand is %v\n", multiLineCommand)
 
      cmd := exec.Command("/bin/bash", "-c", multiLineCommand)
      var out bytes.Buffer
      cmd.Stdout = &out
      err := cmd.Run()
      if err != nil {
          fmt.Println("命令执行出错:", err)
      }
      fmt.Println("命令输出:", out.String())
  }

上述代码实现了在Linux中创建int_strings里面的接口,并将addr_strings中的ip地址一对一地添加到相应地接口上,并将接口up。
执行效果图如下:
在这里插入图片描述
在Linux中用 ip addr 命令 查看代码执行结果是否正确
在这里插入图片描述

写在最后

以上就是用Go代码调用Linux命令的一些简单用法,如果在开发过程中,有需要对Linux进行配置的相关逻辑,可以考虑一下使用这种方法。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值