LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1070|回复: 14

大家帮我看看这个Shell脚本有什么问题!

[复制链接]
发表于 2006-3-12 10:58:46 | 显示全部楼层 |阅读模式
脚本的作用是运行后添加50个密码为空用户名为stud(1-50)的帐户,但是功能没有办法实现

  1. #!/bin/sh
  2. i = 1
  3. awk 'BEGIN { FS = ":" ; } { print $3; }' /etc/passwd > pass
  4. x = `tail -n1 pass`
  5. while [ $i -le 50 ]
  6. do
  7.     mkdir /home/stud${i}
  8.     echo "stud${i}:x:${x}:100:,,,:/home/stud${i}:/bin/bash" >> /etc/passwd
  9.     echo "stud${i}::13068:0:99999:7:::" >>/etc/shadow
  10.     i = $(($i + 1))
  11.     x = $(($x + 1))
  12. done
复制代码
发表于 2006-3-12 11:20:46 | 显示全部楼层
直接for loop useradd 不行吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-12 11:35:58 | 显示全部楼层
Post by BlazingBits
直接for loop useradd 不行吗?

能麻烦说的详细点吗,小弟才接触Shell!^_^
回复 支持 反对

使用道具 举报

发表于 2006-3-12 13:26:13 | 显示全部楼层
Post by leidan
能麻烦说的详细点吗,小弟才接触Shell!^_^


  1. for (( i=1;i<=50;i++ ))
  2. do
  3.         useradd -p '' std$i
  4. done
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-3-12 16:47:28 | 显示全部楼层
这个程序有写问题。uid和gid的分配很不正确。uid和gid都强行从10和100开始,这怎么可以。而且一般用户的ID都在500以上,100一下都是给系统用户留的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-12 21:02:14 | 显示全部楼层
Post by yongjian
这个程序有写问题。uid和gid的分配很不正确。uid和gid都强行从10和100开始,这怎么可以。而且一般用户的ID都在500以上,100一下都是给系统用户留的。

uid是读取/etc/passwd文件的最后一行以:分隔的第三列的数据给变量x啊(我的是从1000开始的)
gid都是100(100是users这个组)
回复 支持 反对

使用道具 举报

发表于 2006-3-12 22:58:32 | 显示全部楼层
Post by leidan
uid是读取/etc/passwd文件的最后一行以:分隔的第三列的数据给变量x啊(我的是从1000开始的)
gid都是100(100是users这个组)


小弟不是很明白两位得意思,难道小弟得程序添加以后,用户名得id会占用100?
小弟试了一下,没出现这种情况啊:ask
回复 支持 反对

使用道具 举报

发表于 2006-3-13 21:22:13 | 显示全部楼层
这样添加感觉很麻烦,而且直接操作shadow文件不好吧
回复 支持 反对

使用道具 举报

发表于 2006-3-14 06:20:01 | 显示全部楼层
Post by leidan
uid是读取/etc/passwd文件的最后一行以:分隔的第三列的数据给变量x啊(我的是从1000开始的)
gid都是100(100是users这个组)

原来的程序好象不是tail -n1这样的吧。 还有就是以最后一行为参照也很不科学。最后一行的uid不一定是最大的。还有就是添加的第一个用户的UID会和参照的UID相同,这个也是错误的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 14:08:57 | 显示全部楼层
Post by yongjian
原来的程序好象不是tail -n1这样的吧。 还有就是以最后一行为参照也很不科学。最后一行的uid不一定是最大的。还有就是添加的第一个用户的UID会和参照的UID相同,这个也是错误的。

版主真是细心,呵呵!以前是tail -l,现在好了,最终如下:

  1. #!/bin/sh
  2. i=1
  3. awk 'BEGIN{FS=":";} {print $3;}' /etc/passwd>pass
  4. x=`tail -n1 pass`
  5. x=$(($x+1))
  6. while [ $i -le 50 ]
  7. do
  8.     mkdir /home/stud${i}
  9.     echo "stud${i}:x:${x}:100:,,,:/home/stud${i}:/bin/bash">>/etc/passwd
  10.     echo "stud${i}::13068:0:99999:7:::">>/etc/shadow
  11.     i=$(($i+1))
  12.     x=$(($x+1))
  13. done
复制代码

在Slackware下新添加的第一个用户自动分配的uid是1000,在最后一行,而且最大;
Post by yongjian
还有就是添加的第一个用户的UID会和参照的UID相同。

这个问题斑竹也提出来了,所以添加x=$(($x+1))后就成功了,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表