LINUX实验---shell实验

文章目录

    • 一、实验目的
    • 二、实验环境:
    • 三、实验内容与步骤
      • PART 1 shell程序理解
      • PART 2 shell程序设计

仅供参考

一、实验目的

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权限下进行)

LINUX实验---shell实验_第1张图片
2. 建立一个shell脚本文件,内容为:
if test “$USER” = “root”
then
yum -y install httpd
else
echo “您不是管理员,没有权限安装软件。”
fi
观察并分析程序运行结果。

程序分析:
去除USER环境变量判断是否为root,如果是则使用yum命令安装httpd反正在显示屏上显示提醒:您不是管理员,没有权限安装软件。

运行结果:
LINUX实验---shell实验_第2张图片
虽然此时我是管理员root账户,但是由于登陆时使用命令su root进行root登录,并没有切换到新的环境,而是在原本的环境下进行,所以环境变量USER任然是原本的student,使用命令su – root或者su - 命令可以切换到root账户并且切换到root下的环境

3.运行教材184页例7.13程序。
LINUX实验---shell实验_第3张图片
(这里由于我这个目录下没有任何.c程序,所以就这样)

4.运行教材184页例7.14程序。

LINUX实验---shell实验_第4张图片

PART 2 shell程序设计

  1. 编程实现如下功能:输入一个账号信息,如系统中无此账号,则输出提示“该账号不存在”,否则输出提示“是否删除该账号Y|N”,如输入y或Y,则删除该账号,输入N或n则不删除,输入其他字符,则重复出现提示“是否删除该账号Y|N”。
echo "输入一个账号名"
read account
#进行判断,如果在passwd目录下存在这个账号名则证明存在
if [ `cat /etc/passwd | grep -w $account` ]
	then echo "是否删除该账号Y|N"
	read determind			#读取决定
	if [ "$determind" = "Y" -o "$determind" = "y" ]	#进行删除
		then `userdel -r $account`	#连带目录和邮箱一起删除
	#如果输入的不是n或者y则重新进行输入和判断
	else 	#并重复提示是否删除Y|N
		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

  1. 编程实现如下功能:在用户家目录下建立10个目录,目录名称为xyz1,xyz2……xyz10,并设置每个目录的权限,其中文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读,执行;其他用户的权限为:读,执行。
#进入用户家目录
if [ "$USER" = "root" ]	#判断此时用户是否是root
	then cd /root		#root家目录
	else cd /home/$USER	#普通用户家目录
fi
for filename in xyz{
     1..10}
do
	mkdir $filename 
	chmod 755 $filename
done

  1. 建立一个文本文件,名为:user.txt,文件格式如下所示,每行的第一个字符串对应用户名,第二个字符串对应为初始密码,一共10行数据。
    aaa abc123456
    bbb cdef90800
    ccc 123abclin
    ……
    编程实现如下功能:建立10个账号信息,其中用户名和初始密码从文件user.txt中读取。为简化操作,假设系统中不存在重名账号。

#!/bin/bash

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` ]	#the user logined
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 

  1. 教材189页习题第6题。

if [ ! \( -d temp \) ]
then 
	mkdir temp
fi
for filename in `ls *.c`
do	

	cp $filename temp 	#指定目录为当前目录下的/temp目录
done
ls temp/ -Sl 	#从大到小排序输出,如果再加上r就是从小到大排序输出


  1. 教材189页习题第7题。

filename=$1
while [ -n "$2" ] 
do
	cat $2 >> $filename
	shift
done	


创作不易,球球了留个赞再走吧(っ °Д °;)っ

你可能感兴趣的:(linux,centos)