#用户组GID处理 gID=\
while [ -z $gID ] do
echo -n \用户组GID:\read gID; if [ -z $gID ] then
echo \错误!用户GID是不能为空的,请重新输入!\ continue; fi
if [ `expr match $gID \then
echo \错误!用户的GID必须为数字,请重新输入!\ gID=\ continue; fi
if [ $gID -lt 500 -o $gID -gt 60000 ] then
echo \错误!用户组的ID范围为500~60000,请重新输入!\ gID=\ continue; fi done
echo -n \说明:\#bash,sh,csh,ksh shellVersion=\
while [ -z $shellVersion ] do
echo -n \登录SHELL(bash,sh,csh,ksh):\ read shellVersion;
if [ $shellVersion != \$shellVersion != \ then
echo \输入的Shell类型【$shellVersion】不在本系统支持范围内,请重新输入!\
shellVersion=\ fi done
echo -n \用户工作目录:\mkdir /home/$userName; if [ $? -eq 0 ] then
echo $userName \成功创建!\fi
18
userInfo=\rsion\
echo $userInfo >> $dataSource; if [ $? -eq 0 ] then
echo \用户信息添加成功!\else
echo \用户信息添加失败!\fi
echo -n \是否继续添加其他用户??(y/n)\ read isContinue; done
#! /bin/bash
dataSource='passwd'; ../menu.sh; clear;
isContinue=%userName=\
while [ $isContinue = \do
while [ $isContinue = \ do
echo -n \输入用户名:\read userName;
if [ -z \then
(3)delete.sh文件
echo \用户名不能为空,请重新输入!\ isContinue=\ continue; fi
CheckDataSourceFileExist; if [ $? -ne 1 ] then
deleteUser=$(awk -F \'$1 == \{ print $0 }' $dataSource);
if [ $deleteUser ] then
echo \用户信息为:\echo -n \是否删除?(y/n)\read isContinue;
if [ -z $isContinue ] then
isContinue=\
19
fi
if [ $isContinue = \ then
CheckDataSourceFileExist; if [ $? -ne 1 ] then
rowID=$(grep1 -n $deleteUser $dataSource | awk -F \
sed2 -e \ cat3 tempFile > $dataSource; rm tempFile; fi if [ $? -eq 0 ] then
echo \记录删除!\else
echo \系统错误,删除失败!\ fi
isContinue=\ fi else
echo \你输入的 【$userID】 用户不存在!\ isContinue=\ fi fi done if [ -n4 \then
echo -n \是否继续删除其他用户??(y/n)\read isContinue;
if [ -z $isContinue ] then
isContinue=\fi
fi Done
1
grep -n $deleteUser $dataSource:显示查找含有$deleteUser信息,并且在最前面加上行号。 2
sed:是流编辑器,对它的输入流进行按指定格式的转换。是一个基本的查找替换程序,可以从标准输入读入文本,并将结果输出到标准输出(屏幕)。 sed的操作对象:普通文件,数据流,一个命令的执行结果。 sed -e \:删除含有$rowID的这一行信息 3
查看文件并把查看的结果重定向输出到passwd文件。 4
-n 非0
20
九、总结
通过此次shell编程实现用户信息管理课程设计,加深了自己对shell编程的应用,首先了解了正则表达式的使用,然后了解流编辑工具sed,列截取命令awk,列切割命令cut,两者都是列截取命令,但其参数和用法不同,awk用法为:awk ‘条件{动作}’,并且域间分隔符参数为-F,默认为白空格,而cut以参数-d来设置分隔符,默认为tab键,并且不支持空格为分隔符。
此次shell编程实现用户信息管理课程设计,更加深刻的理解了用户,组的管理及/etc/passwd文件内容格式的理解。在程序中,还用到了tar命令解压缩文件,分屏显示文件内容more,vi编辑器的使用,对linux系统中的目录结构和shell的基本功能和概念有了进一步的理解和掌握。
在shell编程中也用到了IO重定向(< 输入重定向;> 用于新建或覆盖方式重定向输出;>> 用于追加方式重定向输出),单引号(单引号代表普通字符),双引号的使用(可用户变量替换,命令替换,也可当做普通字符),反单引号的使用(命令替换),变量的使用(定义变量不需声明,但是需要用$来取值),还用到grep进行对特定值的搜索,还有if-then-if,case结构,以及shell中test条件测试的使用。从而加深了自己对shell更进一步的了解,增加了对linux的兴趣。
代码不是很完善,有些功能没有实现(修改用户信息;UID不需用户输入,可以自动生成(可以每生成一个用户,UID自动加1);不能添加重复的用户名和UID,这个功能需要用到列切割和grep搜索)
21
参考文献
1. 邵国金 《Linux 操作系统(第2版)》 电子工业出版社,2014 2. 汤小丹 《计算机操作系统(第三版)》 西安电子科技大学出版社 2012
22