修改bash脚本以获取文件中的每一行并执行命令

时间:2016-03-09 21:39:12

标签: mysql bash sh

我需要修改一个bash脚本来获取文件中的每一行并执行命令。我目前有这个:

#!/bin/bash
if [ -z "$1" ] ; then
    echo "Lipsa IP";
    exit;
fi
i=1
ip=$1
while [ $i -le `wc -l pass_file | awk '{print $1}'` ] ; do
    if [ -n "$ip" ]; then
        rand=`head -$i pass_file | tail -1`
        user=`echo $rand | awk '{print $1}'`
        pass=`echo $rand | awk '{print $2}'`

        CMD=`ps -eaf | grep -c mysql`

        if [ "$CMD" -lt "50" ]; then
            ./mysql $ip $user $pass &
        else
            sleep 15
        fi
        i=`expr $i + 1`
    fi
done

密码文件的格式和名称为pfile:

username password

Intranet hosts文件采用这种格式(逐行)和名称hlist:

192.168.0.1
192.168.0.2
192.168.0.3

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我不明白你想做什么,你还没有做过。你想以某种方式使用ip号文件吗?

无论如何,从密码文件中提取用户名和密码的方式不必要地复杂化(礼貌地说);您可以以更简单的方式迭代文件中的行。而不是:

while [ $i -le `wc -l pass_file | awk '{print $1}'` ] ; do
  rand=`head -$i pass_file | tail -1`
  user=`echo $rand | awk '{print $1}'`
  pass=`echo $rand | awk '{print $2}'`
  # ...
  i=`expr $i + 1`
fi

只需使用bash(Posix)读取命令:

while read -r user pass __; do
  # ...
done < pass_file

(如果pass_file中有一行超过两个值,则__; read命令中的最后一个变量名称接收&#34;行的其余部分&#34 ;)

答案 1 :(得分:0)

我再次搜索网页,找到了一个更符合我需求的清洁代码。

#!/bin/bash
while read ip
do
if [ -n "$ip" ]
then
  while read user pass
  do
     CMD=`ps -eaf | grep -c mysql`
     if [ "$CMD" -gt "50" ]
     then
        sleep 15
     fi
     ./mysql $ip $user $pass &
  done < pass_file
fi
  done < host_file