Ubuntu-Shell编程大作业

本文档详述了四个Linux Shell脚本实验,包括文件夹批处理、压缩解压缩工具、用户管理以及文件操作。实验一中,利用Shell脚本生成参数文件并运行数据生成程序,创建和组织输出文件。实验二展示了带有密码保护功能的压缩和解压缩脚本。实验三涉及创建和删除用户,以及SSH连接。实验四涵盖了文件夹和文件的创建、文件名收集及文件内容合并。这些实验覆盖了Shell脚本在Linux系统管理中的基本应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验一:利用数据生成程序熟练掌握Shell脚本对文件夹的批处理

1.benchmark为一个可执行文件,用于生成我们需要的数据集,运行该文件的命令为./benchmark。
该程序可执行文件的输入文件为该文件所在目录下的parameters.dat,输出文件为statistics.dat,comunity.dat,network.dat,且该程序每次运行生成的数据集不同。
2.parameters.dat中包含的参数为number, averagePower, maxPower, moreno, morenO, mix,max, min,存放格式如parameters.dat所示。
3.现我们需要写一个脚本,完成如下工作。
(1)生成parameters.dat文件,用写入的方式将参数写入该文件。
(2)在相同参数下运行benchmark文件10次,并根据参数和次数新建文件夹,文件夹名字如:1000_10_30_2_1_0.3_3_16_10,最后的数字代表第多少次生成。
(3)每次产生输出文件时将三个输出文件存储在不同的文件夹,并删除该次的参数存放文件:parameters.dat文件。

#!/bin/bash
#test1.sh
#将parameter.dat.txt数据写入文件parameter.dat,并运行benchmark10次,新建文件夹,并输出,然后删除parameters.dat文件。

#创建文件parameter.dat
touch parameters.dat

#将parameter.dat.txt的内容复制到parameter.dat中
cat parameters.dat.txt>>parameters.dat

for((i=1;i<=10;i++))
do
	`./benchmark`
	`mkdir 1000_10_30_2_1_0_0.3_3_16_${i}`
	`mv ./statistics.dat 1000_10_30_2_1_0_0.3_3_16_${i}/statistics.dat`
	`mv ./community.dat 1000_10_30_2_1_0_0.3_3_16_${i}/community.dat`
	`mv ./network.dat 1000_10_30_2_1_0_0.3_3_16_${i}/network.dat`
done
rm -rf parameters.dat

运行截图
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

实验二:在Linux环境下编写一个压缩和解压缩的小工具

要求:压缩的时候可以由用户输入密码,解压缩的时候需要提供密码才能解压缩。

#!/bin/bash
#test2.sh
#encode to zip or unzip file
echo -e '1.zip flle\n2.unzip file\n'

read choice

case $choice in
	1)
		echo "please input the filename:"
		read filename
		echo "please input the zip code"
		read password
		`zip -rP ${password} ${filename}.zip ${filename}`
		echo "zip successfully";;
	2)
		echo "please input the filename"
		read filename
		echo "please input the zip code"
		read password
		`unzip -P ${password} ${filename}`
		echo "unzip successfully";;
esac

运行截图:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

实验三:在Linux下利用case语句编写脚本,实现建立用户和删除用户的功能,过ssh连接到IP主机并保持登录的功能。

实验第一部分实现的功能为:
1.执行create时根据userfile和passfile建立用户。
2.执行delete时根据userfile删除用户。
实验第二部分实现的功能为:
1.执行:/mnt/auto_connect.exp IP password 时保证密码正确,那么就通过 ssh 连接到该 IP 主机,并保持登陆。

第一部分代码:

#!/bin/bash
#test3.sh
#create user and delete user

echo -e "please input userfilename:"
read userfile

echo -e "please input the passfile"
read passfile

echo -e "create:create new users by $userfile and $passfile\ndelete:delete all users by $userfile"
read choice

export username

case $choice in
	'create')
		if [ ! -e $userfile ] || [ ! -e $passfile ]
		then
			echo "$userfile of $passfile do not exist"
			exit 1
		fi
		#user number
		line1=`cat $userfile|wc -l`
		
		#passwd number
		line2=`cat $passfile|wc -l`

		#judge the user number and passwd number
		echo "line1:$line1"
		echo "line2:$line2"
		if [ $line1 -ne $line2 ]
		then 
			echo "user number is not equal with passwd number"
			exit 1
		fi
		#read userfile
		for((i=1;i<=3;i++))
		do 
			read username[i]
			`sudo useradd ${username[i]}`
		done<${userfile}

		#read passwdfile
		for((i=1;i<=3;i++))
		do
			read password[i]
			`echo ${username[i]}:${password[i]} | sudo chpasswd`
			echo "${username[i]}用户创建成功"
		done<${passfile};;
	'delete')
		if [ -e $suerfile ]
		then
			echo "deleting"
		else
			echo "file do not exist"
			exit 1
		fi
		for((i=1;i<=3;i++))
		do
			read username
			echo "${username}用户删除成功"
			`sudo userdel ${username}`
		done<$userfile;;
esac
echo "successfully"

第二部分代码:
需要主机配置ssh环境

#!/bin/bash
#test3_plus.sh
#于主机建立ssh连接
/usr/bin/expect << EOF   
spawn ssh root@$1       
expect {
    "yes/no" { send "yes\r";exp_continue }  
    "password" { send "$2\r" } 
}
interact
EOF

运行截图:
第一部分:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
第二部分截图:
在这里插入图片描述

实验四:在Linux下实现一个文件及文件夹操作的Shell脚本

1.新建一个test文件夹,在下面新建10文件夹,每一个文件夹下新建一个txt文件,并写入内容。
2.获取目录下所有文件的文件名。(包括路径)
3.将test文件夹下10个文件夹下的文件复制到test文件夹下的data文件夹中,将data文件夹中所有文件重定向到一个新的文件中。

cd `dirname $0`

mkdir test

cd ${PWD}/test

#打印当前路径
echo ${PWD}

for((i=0;i<10;i++))
do
	#新建文件夹
	eval "mkdir" "test${i}"
	#新建文件
	touch test${i}/new${i}.txt
	#写入内容
	ls -l>test${i}/new${i}.txt
done

touch filenames.txt

for((i=0;i<10;i++))
do
	#进入目标文件夹
	cd test${i}
	#将当前路径写入filenames.txt
	echo$PWD>>../filenames.txt
	#返回上级目录
	cd ..
done

mkdir data

for((i=0;i<10;i++))
do
	#移动文件夹
	mv test${i}/new${i}.txt data
	`cat data/new${i}.txt>>newAll.txt`
done
#返回上级目录
cd ..

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本shell程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。   可以用任意一个文本编辑器打开passwd文件,该文件里包含用冒号分隔开的字段组成的记录,如下所示:   root:x:0:0:root:/root:/bin/bash   zxj:x:500:500:zxj303:/home/zxj:/bin/bash    . .   在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能: 在屏幕上显示当前所有用户的记录 在屏幕上显示当前所有用户(经过格式化和排序的)的记录 只在屏幕上显示用户名和用户ID 只在屏幕上显示(经过格式化和排序的)用户名和用户ID 查询并显示特定用户的记录 往passwd文件里增加新的用户记录 从passwd文件里删除某个用户记录   你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在你的主脚本menu文件中调用这些脚本文件。   可能你还需要查询一些Unix/Linux命令,比如awk,、sort、tr、cut、paste、sed、grep;你也可能还需要查询其他的Unix/Linux命令。   建议你在主目录下建立一个以 xx xx xx(xx xx xx为学号)命名的目录,并且在本次作业中使用它作为工作目录。 主脚本文件中的菜单   在menu脚本文件里将创建如下菜单,菜单里包含供用户选择的一些操作。 用户信息主菜单 打印当前所有记录 打印当前所有记录(格式化后的) 打印用户名和用户ID 打印(格式化了的)用户名和用户ID 查询特定记录 增加新记录 删除记录 Q——退出 你的选择是:(等待用户输入)   当用户做了选择且所选的操作完成之后,应再次显示主菜单以供用户做下一步选择。你必须用while循环和case条件语句配合来完成此操作。另外在显示主菜单前必须先清除用户屏幕。在以下所有步骤中,当显示主菜单前都需要先清屏。   在menu脚本文件的前面部分你首先要定义三个变量,这三个变量分别存放passwd、add、delete文件的文件名,并且能在所有涉及到passwd、add、delete文件的语句中使用他们。 比如,可以定义成:           record_file=passwd   在所有访问passwd文件的语句中,只要使用 $record_file 即可。这样做的一个优点就是,如果以后你需要重新命名记录或者需要在不同的记录文件中使用你的脚本的话,你只需要修改以上一个语句而不须在所有有关的记录文件里逐一修改语句。如下定义另外两个变量:   add_file=add   delete_file=delete   定义以上变量之后,你必须核对menu脚本文件,看看所需的文件(passwd、add、delete)是否准确存放在当前目录下。如果其中任何一个不存在,你的脚本menu文件就必须显示以下信息,然后退出:   Required file theMissingFile does not exist.(所需文件不存在)   比如,如果passwd文件不存在,就显示“Required file passwd does not exist.(所需文件记录不存在)”然后退出。   在以上等待用户做出选择的菜单中,如果用户偶尔输入了一个代码而不是1、2、3、4、5、6、7或Q,就有信息提示“无效的代码,请按回车键继续``````”(务必保证光标停留在此信息行末尾而不是在下一行的开始处)。等用户按了回车键之后,再次显示主菜单供用户做其他选择。可以允许用户使用Q或q退出。   在以上等待用户做出选择的菜单中,如果用户简单地按了回车键(而不是输代码)的话,就会出现信息“Selection not entered. Press Enter to continue…"(务必保证光标停留在此信息行末尾而不是在下一行的开始处)。等用户按了回车键之后,再次显示主菜单供用户做其他选择。   当用户选择了第一项——打印当前所有用户记录   以下是当用户在主菜单中选择第一个选项后,menu脚本文件输出的内容的例子:    (此处是主菜单—略) 你的
LINUX/UNIX Shell编程大作业Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本shell程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。 可以用任意一个文本编辑器打开passwd文件,该文件里包含用冒号分隔开的字段组成的记录,如下所示: root:x:0:0:root:/root:/bin/bash zxj:x:500:500:zxj303:/home/zxj:/bin/bash . . . 在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能: 1、 在屏幕上显示当前所有用户的记录 2、 在屏幕上显示当前所有用户(经过格式化和排序的)的记录 3、 只在屏幕上显示用户名和用户ID 4、 只在屏幕上显示(经过格式化和排序的)用户名和用户ID 5、 查询并显示特定用户的记录 6、 往passwd文件里增加新的用户记录 7、 从passwd文件里删除某个用户记录 你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在你的主脚本menu文件中调用这些脚本文件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值