仅供参考
一、实验目的
1、掌握shell环境变量、管道、输入输出重定向使用方法; 2、掌握shell脚本建立和执行方法; 3、掌握shell脚本的基本结构; 4、掌握基本的shell编程方法。
二、实验环境:
一台运行GNOME图形用户界面的任意一种Linux操作系统的计算机。(我是Centos)
三、实验内容与步骤
PART 1 shell程序理解
1.建立一个shell脚本文件,内容为: for username in test{1…10} do useradd
u
s
e
r
n
a
m
e
e
c
h
o
"
username echo "
usernameecho"{username}abc" | passwd --stdin $username &> /dev/null done cat /etc/passwd | grep test 观察并分析程序运行结果。
程序分析:循环为变量username赋值为test1-test10,并利用这个变量建立一个以这个变量为用户名的账户,成功或者失败都将提示或者错误流丢弃到/dev/null(丢弃)。最后打开/etc/passwd文件,筛选带有test字符的信息。
运行结果:(一下结果为在root权限下进行)
2. 建立一个shell脚本文件,内容为: if test “$USER” = “root” then yum -y install httpd else echo “您不是管理员,没有权限安装软件。” fi 观察并分析程序运行结果。
程序分析: 去除USER环境变量判断是否为root,如果是则使用yum命令安装httpd反正在显示屏上显示提醒:您不是管理员,没有权限安装软件。
运行结果: 虽然此时我是管理员root账户,但是由于登陆时使用命令su root进行root登录,并没有切换到新的环境,而是在原本的环境下进行,所以环境变量USER任然是原本的student,使用命令su – root或者su - 命令可以切换到root账户并且切换到root下的环境
3.运行教材184页例7.13程序。 (这里由于我这个目录下没有任何.c程序,所以就这样)
4.运行教材184页例7.14程序。
PART 2 shell程序设计
- 编程实现如下功能:输入一个账号信息,如系统中无此账号,则输出提示“该账号不存在”,否则输出提示“是否删除该账号Y|N”,如输入y或Y,则删除该账号,输入N或n则不删除,输入其他字符,则重复出现提示“是否删除该账号Y|N”。
echo "输入一个账号名"
read account
if [ `cat /etc/passwd | grep -w $account` ]
then echo "是否删除该账号Y|N"
read determind
if [ "$determind" = "Y" -o "$determind" = "y" ]
then `userdel -r $account`
else
while [ "$determind" != "N" -a "$determind" != "n" ]
do
echo "是否删除该账号Y|N"
read determind
if [ "$determind" = "Y" -o "$determind" = "y" ]
then ` userdel - r $account`
break;
fi
done
fi
else
echo "该账号不存在";
fi
- 编程实现如下功能:在用户家目录下建立10个目录,目录名称为xyz1,xyz2……xyz10,并设置每个目录的权限,其中文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读,执行;其他用户的权限为:读,执行。
if [ "$USER" = "root" ]
then cd /root
else cd /home/$USER
fi
for filename in xyz{1..10}
do
mkdir $filename
chmod 755 $filename
done
- 建立一个文本文件,名为:user.txt,文件格式如下所示,每行的第一个字符串对应用户名,第二个字符串对应为初始密码,一共10行数据。
aaa abc123456 bbb cdef90800 ccc 123abclin …… 编程实现如下功能:建立10个账号信息,其中用户名和初始密码从文件user.txt中读取。为简化操作,假设系统中不存在重名账号。
cat user.txt | while read userAndPasswd
do
user="`echo $userAndPasswd |cut -d " " -f 1`"
passwd="`echo $userAndPasswd | cut -d " " -f 2`"
#echo -e "$user" " \c"
#echo "$passwd"
useradd $user
echo "$passwd" | passwd --stdin $user
done
4.编程实现如下功能:输入一个用户名,查找是否已登录系统,如已登录,则发送一个消息给他,消息内容为:“ hello,用户账号”;如未登录,则显示“用户尚未登录”。
read username
if [ -n `who | grep -m 1 -o $username` ]
then
ttyStr=`who | grep $username | grep -m 1 pts | cut -d "/" -f 2`
tty=pts/${ttyStr:0:1}
echo "hello,$username" | write $username $tty
else
echo "用户尚未登录"
fi
- 教材189页习题第6题。
if [ ! \( -d temp \) ]
then
mkdir temp
fi
for filename in `ls *.c`
do
cp $filename temp
done
ls temp/ -Sl
- 教材189页习题第7题。
filename=$1
while [ -n "$2" ]
do
cat $2 >> $filename
shift
done
创作不易,球球了留个赞再走吧(っ °Д °;)っ
|