首页 > 解决方案 > Shell 脚本可以逐行读取文件,但不能对每一行执行操作

问题描述

我正在尝试在多台机器上运行此命令

sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@x.x.x.x "mkdir test"

IP 存储在以下 .txt 文件中

$ cat ips.txt
10.0.2.15
10.0.2.5

我创建了一个 bash 脚本,它逐行读取这个文件。如果我使用以下命令运行它echo

#!/bin/bash
input="ips.txt"
while IFS= read -r line
do
  echo "$line"
  #sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@$line "mkdir test"
done < "$input"

它打印每一行:

$ ./variables.sh
10.0.2.15
10.0.2.5

这让我明白脚本正在按预期工作。但是,当我用echo要为每一行运行的命令替换该行时:

#!/bin/bash
    input="ips.txt"
    while IFS= read -r line
    do
      #echo "$line"
      sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@$line "mkdir test"
    done < "$input"

它只对文件的第一个 IP 执行操作,然后停止。为什么?

标签: shellsshpass

解决方案


设法通过使用 afor而不是 a来解决这个问题while。脚本最终看起来像这样:

for file in $(cat ips.txt)
do
  sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@$file "mkdir test"
done

推荐阅读