1. 程式人生 > >shell 實練(3)-賬戶建立/新增到組/for迴圈報錯解決

shell 實練(3)-賬戶建立/新增到組/for迴圈報錯解決

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系統存在的所有使用者名稱