Linux进取之旅1: 第一个脚本-检查及创建用户

Linux新手,欢迎指点!!

目标:

当以一个用户名为参数执行该脚本时,首先检查该用户是否已存在于系统,如果存在则返回一个提示;如果不存在则等待用户确认是否创建该用户;yes则创建;no则脚本终止,同时返回该结果的退出码(exitcord)。

思路:

1. 检查用户是否在,id 或 getent命令;

2. 如果用户不存在,则等待用户确认是否创建该用户。意味着该脚本需要与用户交互。说说这样做的理由. 对于无论你接受与否的就安装软件或修改你系统的行为,绝大多数人都会反感。而且这种行为很流氓。所以这个脚本增加了确认,让执行该脚本的人,有自行选择的权利。简而言之,尊重。那怕只是尊重自己。与代码,与技术无关。

3. 用户创建完成之后,如果没有设置密码则该用户不能正常登入系统。意味关该脚本需要再次与用户交互设置密码,且设置密码时,密码字符不会回显。

于是有了第一个脚本,命名chk_user.sh. 请自动忽略行号!

1)#!/bin/bash

2)

3)#use to  checking and adding user.

4)#If user has just existing on system

5)#print user status. otherwise, adding that user.

6)#usage: chk_user.sh  <username>.

7)

8)if  (getent passwd "$1")

9)         then

10)         echo "Look like user $1 has just existing on system"

11)         exit 0

12)

13) else

14)         echo "No such user $1 on system yet. Are your want to adding $1 now ?"

15)

16) cat << EOF

17) Please enter "y"or "n" to confirm:

18) EOF

19) read CONFIRM

20)

21)                 case "$CONFIRM"in

22)                         y)

23)                         useradd $1

24)                         echo"User $1 has added on system "

25) cat << EOF

26) Please enter $1‘s password:

27) EOF

28) read -s PASSWD

29)

30)                         echo $PASSWD | passwd --stdin $1> /dev/null

31)                         echo"Adding user $1 successful completed!"

32)                         exit 0

33)                         ;;

34)

35)                         n)

36)                         echo"Task terminated"

37)                         exit 1

38)                         ;;

39)

40)                         *)

41)                         echo ‘Ithink, Your should always type the "y" or     "n" to comfirm ‘

42)                         exit 1

43)                         ;;

44)                 esac

45) fi

测试脚本:

bob不存在于当前系统,所以提示是否创建,好像工作正常.

当确认为no或确认非yes和no 时,脚本终止。好像也没什么意外。再来……

然而,事实总非如此!当没指定参数(即用户名)时,该脚本也能执行,这个,这个好像不是太合理……理想的结果是,当没有指定参数(用户名)时,脚本在执行时会给出一个提示,同时脚本终止运行。于是有了修改后的脚本, 命名chusr:

#!/bin/bash

# use to checking and adding user.

# If user has just existing on system

# print the user‘s status. otherwise,  adding that user.

# usage: chusr  <username>.

if[ -z $1 ]

then

echo "Hey, guys! Yourshould be enter a username !"

exit 1

elif(getent passwd "$1")

then

echo "Look like user $1 has just existing"

exit 0

else

echo "No such user $1 on system yet. Are your want to adding $1 now ?"

cat << EOF

Please enter "y" or "n" to confirm:

EOF

read CONFIRM

case "$CONFIRM" in

y)

useradd $1

echo"User $1 has added on system "

cat << EOF

Please enter $1‘s password:

EOF

read-s PASSWD

echo $PASSWD | passwd --stdin $1> /dev/null

echo"Good job! adding user $1 successfulcompleted !"

exit 0

;;

n)

echo"Task  terminated"

exit 1

;;

*)

echo ‘Ithink, Your should always type the "y" or "n" to confirm‘

exit 1

;;

esac

fi

再次测试:

好像都在按预期的方式工作……不过觉得还有改进的地方;

理想的状态是。当提示“I think, You shouldalways type the y or n to confirm" 之后,应该再次重复提示用户确认,而不是终止脚本。

关于脚本文件的放置。

在当前的用户的初始化文件中有一条PATH变量:PATH=$PATH:$HOME/bin ,即用户home

目录下的子目录bin,而这个目录默认并不存在。所以,最简单的方法是在该目录下创建一个bin的子目录,将脚本文件放置在这个目录里,并赋予脚本文件可执行权限,就能像执行其他系统命令一样执行该脚本。

关于权限

我在初始化文件中创建了一条umask 077命令(只针对自己,对系统上的其他用户无交),当创建目录时默认权限为700),创建文件时默认权限为600,即总是个人专有。毕竟你不希望你的脚本文件任何人都可以修改及执行。而对于一个不可执行的文件,也没有理由赋予其可执行的权限。

2016-09-17

时间: 2024-11-04 17:38:52

Linux进取之旅1: 第一个脚本-检查及创建用户的相关文章

【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见

内容简介 1.第一部分第五课:Unity桌面,人生若只如初见 2.第一部分第六课预告:Linux如何安装在虚拟机中 Unity桌面,人生若只如初见 不容易啊,经过了前几课的学习,我们认识了Linux是什么,以及如何安装Linux系统(我们以Ubuntu这个Linux发行版为以后的演示系统),我们也在上一课终于把Ubuntu安装好了. "很不错,掌声给自己". 安装Ubuntu遇到什么问题,可以在我们的QQ群和微信群提问,也可以私信小编,QQ.微信.邮件都行.联系方式在下面. Linux

【Linux探索之旅】第一部分第三课:測试并安装Ubuntu

内容简单介绍 1.第一部分第三课:測试并安装Ubuntu 2.第一部分第四课预告:磁盘分区 測试并安装Ubuntu 大家好,经过前两个比較偏理论(是否想起了带着瓜皮帽,手拿折扇的老学究,或者腐儒)的课程,这第三课我们就正式进入实战啦. 可能不少朋友没使用过Linux这个操作系统,那么这一课就是见识一下它的庐山真面目的时候了. 我们这个系列课程所使用的Linux发行版是Ubuntu,由于其使用广泛.技术支持全面.文档完整,另一个非常关键的原因就是Ubuntu的配色偏"土豪金"啊,有木有.

【Linux探索之旅】第一部分测试题

内容简介 1.第一部分测试题 2.第二部分第一课预告:终端Terminal,好戏上场 10道测试题 让我们选择开机时进哪个操作系统的软件叫什么? A. booter B. bootloader C. OS downloader D. rebooter Windows和Linux可以在一台电脑上共存,对吗? A. 对 B. 不对 谁是GNU项目的创始人? A. Richard Stallman B. Bill Gates C. Steves Jobs D. Roberto Benigni MAC

【Linux探索之旅】第一部分第四课:磁盘分区,并完成Ubuntu安装

内容简介 1.第一部分第四课:磁盘分区,并完成Ubuntu安装 2.第一部分第五课预告:Unity桌面,人生若只如初见 磁盘分区 上一课我们正式开始安装Ubuntu了,但是到了分区的那一步,小编却戛然而止.这是什么情况呢? 请读者们千万不要扁我:如果真的要扁,那就请"海扁",让我一次挨(爱)个够(想到了庾澄庆的<让我一次爱个够>),体会一下苏武的感觉. 是这样的:磁盘分区是个很重要且比较难的知识点. 所以我们单独用这一课来讲磁盘分区的概念,磁盘的组成,文件系统,等. 磁盘分

【Linux探索之旅】第一部分第三课:测试并安装Ubuntu

内容简介 1.第一部分第三课:测试并安装Ubuntu 2.第一部分第四课预告:磁盘分区 测试并安装Ubuntu 大家好,经过前两个比较偏理论(是否想起了带着瓜皮帽,手拿折扇的老学究,或者腐儒)的课程,这第三课我们就正式进入实战啦. 可能不少朋友没使用过Linux这个操作系统,那么这一课就是见识一下它的庐山真面目的时候了. 我们这个系列课程所使用的Linux发行版是Ubuntu,因为其使用广泛,技术支持全面,文档完整,还有一个很关键的原因就是Ubuntu的配色偏"土豪金"啊,有木有,就是

【Linux探索之旅】第一部分第二课:下载Linux,免费的噢

 内容简介 1.第一部分第二课:下载Linux,免费的噢 2.第一部分第三课预告:测试并安装Ubuntu 下载Linux,免费的噢 大家好,上一课我们认识了非常"霸气侧漏"的Linux操作系统. 也知道了它的吉祥物:企鹅,叫Tux(燕尾服的意思),而且它是一只雄性的企鹅,爷们,24K纯滴.(这个不重要好不,小编...) 我们还提到了什么是操作系统,Linux的历史和不同的Linux发行版.也确定了我们后续课程要使用的Linux发行版:Ubuntu.幸好,在各个Linux发行版(每个发

Shell实战第一篇:自动批量创建用户并配置保存自定义密码

个人笔记分享(在线阅读):http://note.youdao.com/noteshare?id=c4ee31bdcef0d28ec525bed113c93763&sub=CFE5180F8455421E9D5252FEC98AB1ED 原文地址:http://blog.51cto.com/6575793/2072687

【Linux探索之旅】第三部分第三课:监视系统活动,滴水不漏

内容简介 1.第三部分第三课:监视系统活动,滴水不漏 2.第三部分第四课预告:后台运行及合并多个终端 监视系统活动,滴水不漏 经过上一课(<[Linux探索之旅]第三部分第二课:流.管道.重定向,三管齐下>)的锤炼,现在大家对Linux的命令行应该有了新的认识,而且水准大概已经提高到了一个不错的档次了.如果你还没有,快,快去给我练习去~ 上一课算是比较难的,大家都辛苦了.所以这课给大家轻松一下,可以愉快地学完. 放眼现在的操作系统,基本都是多任务操作系统了,Linux当然也不例外.因此,Lin

【Linux探索之旅】第二部分第六课:Nano,初学者的文本编辑器

内容简介 1.第二部分第六课:Nano,初学者的文本编辑器 2.第二部分第七课预告:软件安装,如虎添翼 Nano,初学者的文本编辑器 这一课比较简单,没有什么太难的概念.不过这一课会讲如何配置终端噢. 大家可以泡个泡面,烤只烤鸡:剥个卤蛋,慢慢来看. 之前的课程中,我们已经学会了在终端中用多种不同的方式来查看文件的内容,但是我们还不知道如何在终端中修改文件的内容. 为什么我们把文本编辑器推迟到现在来说呢?因为这是终端可以提供的强大功能之一. 在Linux终端的文本编辑器当中,比较著名的有:Nan