我需要修改一个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
有什么建议吗?
答案 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