免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9418 | 回复: 7
打印 上一主题 下一主题

expect if 判断问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-15 11:45 |只看该作者 |倒序浏览
请问怎么从一用户文件列表中读取用户,然后判断其是否存,如果存在则添加到某组,如果不存在则添加。。。

脚本如下,但判断部分出问题,不知道expect怎么表达,谢谢!

  1. #!/usr/bin/expect
  2. set userfile [open [lindex $argv 0]]
  3. while {[gets $userfile user] >= 0} {
  4. #  expect "*]#\ "
  5. #    send "grep $user /etc/passwd\r"
  6.       expect "*]#\ "
  7.         send "if grep $user /etc/passwd;then useradd -g wheel $user;else useradd -g wheel -p 123456 $user;fi\r"
  8. }
  9. close $userfile
  10. exit
复制代码


  1. [root@RHEL4_201 ~]# cat userfile.txt
  2. Eric
  3. Bob
  4. Ying
复制代码

论坛徽章:
0
2 [报告]
发表于 2009-07-15 11:53 |只看该作者
你要用这个脚本在本机做还是在远程主机做?

没有spawn是无法进行后续匹配的

论坛徽章:
0
3 [报告]
发表于 2009-07-15 12:09 |只看该作者
原帖由 从未被和谐 于 2009-7-15 11:53 发表
你要用这个脚本在本机做还是在远程主机做?

没有spawn是无法进行后续匹配的


是在本机运行脚本--》登录到远程机器--》判断用户是否存在--》存在 则。。。。。
                                             |
                                             |__  不存在,则。。。。。

这上面的是部分脚本,省略了登录部分的。

表达能力不好,呵呵~

论坛徽章:
0
4 [报告]
发表于 2009-07-15 13:35 |只看该作者
刚才试了一下.如果用户名存在的话会出现以下提示..

# useradd test
useradd: Account `test' already exists.
(不同版本提示可能不同)
如果存在此用户的话..用
expect {
"useradd: Account `test' already exists." {send "usermod -g test test"}
}

可以不适用if判断

论坛徽章:
0
5 [报告]
发表于 2009-07-15 16:58 |只看该作者
原帖由 从未被和谐 于 2009-7-15 13:35 发表
刚才试了一下.如果用户名存在的话会出现以下提示..

# useradd test
useradd: Account `test' already exists.
(不同版本提示可能不同)
如果存在此用户的话..用
expect {
"useradd: Account `test' alre ...


所以要查看/etc/passwd文件里,是否存在该用户,
谁能帮忙调试一下这个匹配的判断。。。。 谢谢!!!

论坛徽章:
0
6 [报告]
发表于 2009-07-15 17:08 |只看该作者
如果出现test' already exists这个信息了,就证明系统里边有这个用户,直接把它添加到指定组里就行了..想不明白你为什么非要用判断?

貌似昨天在群里碰见一个类似的问题..


#!/usr/bin/expect -f

set userfile [open [lindex $argv ]]

while { [gets $userfile user] } {
        spawn ssh root@uhost
        expect {
                "(yes/no)?"    {send "yes\r";exp_continue}
                "password:"    {send "$passwd\r";exp_continue}
        }
        expect {
        " ~]#"  {send "useradd $user\r";exp_continue}
        "already exists." {send "usermod -g wheel $user\r";send "exit\r"}
        }
}

没调试过....但大概就是这个意思..根据你的情况稍微改改应该能弄...没有用户就添加用户,有就直接加到wheel组里.这里的"already exists." 可能会因为不同的版本返回的信息不同...你用到你实际的机器上抓取信息替换一下..只要你的机器不是有好几个版本的linux.应该没什么问题.

[ 本帖最后由 从未被和谐 于 2009-7-15 17:11 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-07-15 17:45 |只看该作者
OK!~ 测试一下如何 。。。 

论坛徽章:
0
8 [报告]
发表于 2009-07-20 10:37 |只看该作者
不行,郁闷ing....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP