1、设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdx,其中xx0130 

首先分析问题,程序执行应该这样:

添加一个新组;        groupadd class1   

新建30个用户,当然要用到循环; adduser stdXX  (需要立即设置密码及信息) 或 useradd stdXX (你不需要立即设置密码)

                                                              或者使用:echo XXXX (密码) | passwd --stdin 用户名        通过管道实现用户输入密码的交互

再将新建的用户添加到新组;        usermod -G class1 stdXX  或直接 useradd stdXX -g class1

附code:

  1 #!/bin/bash
  2
  3 groupadd class1
  4 for (( i=1;i<10;i++ ))                                     考虑到30个用户太多,所以取9个
  5 do      
  6         useradd std$i -g class1
  7         echo "this time i= $i"
  8 done
  9        

查看结果:

Loong:/home/yee# vim /etc/group

61 ftp:x:120:
62 class1:x:1001:                                   文件中增加了组

Loong:/home/yee/shell# sh -x practise1.sh           执行过程
+ groupadd class1
+ (( i=1 ))
+ (( i<10 ))
+ useradd std1 -g class1
+ echo 'this time i= 1'
this time i= 1
+ (( i++  ))
+ (( i<10 ))
+ useradd std2 -g class1
+ echo 'this time i= 2'
this time i= 2
.............
+ (( i++  ))
+ (( i<10 ))
+ useradd std9 -g class1
+ echo 'this time i= 9'
this time i= 9
+ (( i++  ))
+ (( i<10 ))

Loong:/home/yee/shell# vim /etc/passwd

30 ftp:x:110:120:ftp daemon,,,:/srv/ftp:/bin/false
 31 std1:x:1001:1001::/home/std1:/bin/sh                      文件中增加了9个用户
 32 std2:x:1002:1001::/home/std2:/bin/sh
 33 std3:x:1003:1001::/home/std3:/bin/sh
 34 std4:x:1004:1001::/home/std4:/bin/sh
 35 std5:x:1005:1001::/home/std5:/bin/sh
 36 std6:x:1006:1001::/home/std6:/bin/sh
 37 std7:x:1007:1001::/home/std7:/bin/sh
 38 std8:x:1008:1001::/home/std8:/bin/sh
 39 std9:x:1009:1001::/home/std9:/bin/sh

编写中遇到的问题:

编写中写了很多个循环的方式,但是总是报错,最后才发现一个问题是这样的,

错误为Syntax error: Bad for loop variable

Loong:/home/yee/shell# sh -x practise1.sh
+ groupadd class1
practise1.sh: 4: Syntax error: Bad for loop variable

解决办法:sudo dpkg-reconfigure dash
在选择项中选No

Loong:/home# sudo dpkg-reconfigure dash
[: 88: false: unexpected operator
正在删除 “diversion of /bin/sh to /bin/sh.distrib by dash”
正在删除 “diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash”


从 ubuntu 6.10 开始,ubuntu 就将先前默认的bash shell 更换成了dash shell;其表现为/bin/sh 链接到了/bin/dash而不是传统的/bin/bash。

ubuntu edgy是第一个将dash作为默认shell来发行的版本,这似乎是受了debian的影响。wiki里面有官方的解释,https://wiki.ubuntu.com/DashAsBinSh,主要原因是dash更小,运行更快,还与POSIX兼容

网络答案:

#!/bin/sh

i=1

groupadd class1

while [ $i -le 30 ]

do

if [ $i -le 9 ] ;then

USERNAME=stu0${i}

else

USERNAME=stu${i}

fi

useradd $USERNAME

mkdir /home/$USERNAME                        这个在自己的code中没有做

chown -R $USERNAME /home/$USERNAME

chgrp -R class1 /home/$USERNAME

i=$(($i+1))

done


相关账户操作指南:

1、建用户:

adduser phpq                             //新建phpq用户
passwd phpq                               //给phpq用户设置密码
2、建工作组
groupadd test                          //新建test工作组
3、新建用户同时增加工作组
useradd -g test phpq                      //新建phpq用户并增加到test工作组
注::-g 所属组 -d 家目录 -s 所用的SHELL

另附:useradd

1.作用
useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户。

2.格式
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name

3.主要参数
-c:加上备注文字,备注文字保存在passwd的备注栏中。 
-d:指定用户登入时的启始目录。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-g:指定用户所属的群组。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。
-u:指定用户ID号。

4.说明
useradd可用来建立用户账号,它和adduser命令是相同的。账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。

5.应用实例
建立一个新用户账户,并设置ID:
#useradd caojh -u 544

需要说明的是,设定ID值时尽量要大于500,以免冲突。因为Linux安装后会建立一些特殊用户,一般0到499之间的值留给bin、mail这样的系统账号。



4、给已有的用户增加工作组
usermod -G groupname username
或者:gpasswd -a user group

5、临时关闭:在/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上*就可以了。想恢复该用户,去掉*即可。

或者使用如下命令关闭用户账号:
passwd peter –l
重新释放:
passwd peter –u
6、永久性删除用户账号
userdel peter

groupdel peter

usermod –G peter peter   (强制删除该用户的主目录和主目录下的所有文件和子目录)
7、从组中删除用户
编辑/etc/group 找到GROUP1那一行,删除 A
或者用命令
gpasswd -d A GROUP
8、显示用户信息id user
cat /etc/passwd

9、查看当前用户组

id  -gn

id -a 用户名


/etc/group文件包含所有组

/etc/group文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的;

用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去,

/etc/group的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:

group_name:passwd:GID:user_list



/etc/shadow和/etc/passwd系统存在的所有用户名



posted on 2022-07-05 18:13  我在全球村  阅读(416)  评论(0编辑  收藏  举报