Linux课程设计报告 下载本文

#用户组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