需要帮助shell脚本来过滤所有者机器列表

时间:2016-12-16 16:31:54

标签: linux shell unix awk scripting

我已经为每台机器自动更改了近2000台主机的密码。我写了下面的脚本。

  #!/bin/bash
  while read line
  do
  ip=`cat /root/file | awk ' { print $1 } '`
  owner=`cat /root/file | awk ' { print $2 } '`
  function randpass() {
  [ "$2" == "13" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
  cat /dev/urandom | tr -cd "$CHAR" | head -c 8
  echo
  }
  newpass=`randpass`
  ssh $ip "mkdir -p /home/dev/.vnc"
  ssh $ip "echo $newpass | vncpasswd -f > /home/dev/.vnc/passwd"
  ssh $ip "chown -R dev:dev /home/dev/.vnc"
  ssh $ip "chmod 0600 /home/dev/.vnc/passwd"
  ssh $ip "echo "$newpass" | passwd --stdin dev"
   #ssh $ip "echo -e "dev:$newpass" | chpasswd"
   echo -e "$ip:$newpass:$owner" >> `date +"%d-%m-%y"`
   done < /root/file

它将输出低于文件:

  10.10.10.100:password1:bob1
  10.10.10.101:password2:bob2
  10.10.10.102:password3:bob3
  10.10.10.104:password5:bob1
  10.10.10.102:password4:bob3
  10.10.10.108:password8:bob1

我需要添加其他脚本请帮忙

从上面的文件输出我需要生成如下文件:

文件名bob1(这是用户名):

  10.10.10.108:password8
  10.10.10.104:password5
  10.10.10.100:password1

文件名bob2:

  10.10.10.101:password2

文件名bob3:

    10.10.10.102:password3
    10.10.10.102:password4

注意:用户名可能会更改并添加更多用户名

1 个答案:

答案 0 :(得分:1)

使用AWK:

awk -F: -vOFS=: '{ a = $NF; NF--; print > a }' file

该命令将输入​​和输出field separators设置为:。该脚本将最后一个字段$NF保存到a变量中,减少字段数,并将其余字段打印到文件名等于a的文件中,方法是output redirection>)。

注意,使用冒号作为字段分隔符是可靠的,因为我们只得到最后一个字段,最后一个字段是不允许冒号字符的用户名。