实验五 shell脚本编程

这个作业属于哪个课程 班级课程链接
这个作业的要求在哪 作业要求链接
学号-姓名 17041524-张剑平
作业学习目标 1、了解shell脚本的概念及使用 。2、掌握shell脚本语言的基本用法。3、学习简单的shell脚本编程。

1.让用户输入一个字符串,如果用户输入的是hello,则输出hello 用户姓名首字母缩写,否则输出请输入hello

img

mkdir exp5      #创建新的文件夹exp5,作为本次实验的文件夹
#!/bin/bash                         #指定shell脚本解释器路径
read -p '请输入一个字符串:' str      #将输入的值赋给变量str
if [ $str = "hello" ]              #判段输入的是否为hello 
then
	echo "hello zzz"	  #若输入为hello则输出hello zzz
else
	echo "请输入hello"    #若输入不是hello则提示请输入hello
fi

img

img

img

vim t1.sh    #创建t1.sh文件
chmod +x t1.sh    #t1文件获得了执行权限
./t1.sh   #相对路径运行t1.sh文件

2.编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其他数据输出。

#!/bin/bash
read -p '请输入用户:' user_name   #将输入的用户赋给变量user_name
id $user_name &> /dev/null   #用id命令查看该用户是否存在,并不显示输出结果
if [ $? -eq 0 ]     #判段上一个命令执行后的退出状态
then
	echo "存在用户$user_name"       #若存在该用户则输出存在此用户
else
	echo "不存在用户$user_name"     #若不存在该用户则输出不存在此用户
fi

img

img


3.编写脚本计算1-100之间的所有奇数和。

#!/bin/bash

SUM=0       #定义变量SUM作为和并赋初值为0  
for i in {1..100..2}  #用for循环语句将1-100中的奇数依次赋给变量i
do
	let SUM=$SUM+$i   #将1-100中的所有奇数相加结果赋给SUM
done
echo "1-100之间的所有奇数和为:$SUM"  #输出最后的和

img

img


4.编写脚本,判断键盘输入整数是否为质数。

#!/bin/bash

read -p '请输入一个正整数:' num         #将输入的正整数赋给变量num
[ $num -eq 1 ] && echo '$num不是质数' &&exit  #判断值是否为1,1不是质数
[ $num -eq 2 ] && echo '$num是质数' &&exit   #判断值是否为2,2为质数
for i in `seq 2 $[$num-1]`  #用for语句给变量i赋值为2-num-1
do
	[ $[$num%i] -eq 0 ] && echo "$num不是质数"&&exit    #将num对i循环取余,
done              #若存在余数为0的情况,则输出该数不是质数
echo "$num是质数"&&exit  #若不存在余数为0的情况,则输出该书为质数

img

img


5.模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作。

#!/bin/bash
cat <<-EOF            #获取stdin,并在EOF处结束stdin,输出stdout,打印菜单
	h	显示命令帮助  #<<-EOF的作用是如果分解符EOF前有制表符或在空格,
	f	显示磁盘分区  #则EOF仍会被当做结束分界符,表示stdin的结束
	d	显示磁盘挂载
	m	查看内存使用
	u	查看系统负载
	q	退出程序 
EOF
while true
do
	read -p "请输入需要操作的内容(help h):" action
	case $action in    #用case语句来判段输入的字符,进而输出相对应的内容
		h)
			cat <<-EOF
				h	显示命令帮助
				f	显示磁盘分区
				d	显示磁盘挂载
				m	查看内存使用
				u	查看系统负载
				q	退出程序
			EOF
			;;
		f)
			lsblk     #列出所有可能块设备的信息,显示他们之间的依赖关系
			;;
		d)
			df -h     #显示文件系统的磁盘使用情况,使用人类可读的格式
			;;
		m)
			free -m   #查看内存使用情况
			;;
		u)
			uptime    #查看系统的负载信息
			;;
		q)
			exit      #退出程序
			;;
	esac
done

img

img

 cat <<-EOF        #获取stdin,并在EOF处结束stdin,输出stdout,打印菜单 <<-EOF的作用是如果分解符                      EOF前有制表符或在空格,则EOF仍会被当做结束分界符,表示stdin的结束。

img

img

img

img


6.编写脚本实现计算用户输入参数数字的和,分别用shift和for循环实现。

#!/bin/bash

SUM=0           #定义和变量SUM,并赋初值为0
while [ $# -ne 0 ]   #判断提供到shell脚本或者函数的参数总数是否不等于0
do
	let SUM=$SUM+$1  #若不等于0,则循环相加,$1表示第一位参数
	shift            #左移一位
done
echo SUM=$SUM        #输出最后的和SUM

img

img

#!/bin/bash
SUM=0       #定义和变量SUM,初值为0
for i       #变量i为输入的参数
do 
	let SUM=$SUM+$i     #循环相加输入的参数
done
echo SUM=$SUM           #输出最后的和

img

img


7.编写脚本,生成一个phonenumber.txt文件,文件内容为随机产生以139开头的手机号1000个,每个手机号占一行

#!/bin/bash
file=./phonenumber.txt           #创建文件phonenumber.txt
for ((i=1;i<=1000;i++))          #for循环1000次,产生1000个电话号码
do
	n1=$[ $RANDOM%10 ]           #随机产生一个数字
	n2=$[ $RANDOM%10 ]
	n3=$[ $RANDOM%10 ]
	n4=$[ $RANDOM%10 ]
	n5=$[ $RANDOM%10 ]
	n6=$[ $RANDOM%10 ]
	n7=$[ $RANDOM%10 ]
	n8=$[ $RANDOM%10 ]
	echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> $file  #组合为19开头的电话号码
done											 #存到phonenumber.txt文件中

img

img

打开生成的phonenumber文件:

img

img


8.在第7题产生的1000个电话号码中抽取5位幸运号码,并提示,要求只显示前3位数字和后4位数字,中间用*代替。

#!/bin/bash
phone=./phonenumber.txt    #定义变量phone
for ((i=1;i<=5;i++))     #for循环5次,产生5个幸运号码
do
	line=`wc -l $phone | cut -d' ' -f1`   #将phone中的所有号码个数赋给line
	luck_line=$[ RANDOM%$line+1 ]    #随机产生数字作为幸运号码的行号
	luck_number=`head -$luck_line $phone | tail -1` #取出幸运号码
	echo "139****${luck_number:7:4}"  #按要求显示幸运号码
	echo $luck_number >> luck.txt   #将产生的幸运号码存到luck.txt中,并显示
	sed -i "/$luck_number/d" $phone  #从phone中删除已被抽取到的幸运号码
done

img

img

cat luck.txt   #查看luck.txt文件内容
wc -l phonenumber.txt    #统计phonenumber.txt文件内容的行数

9.使用until语句批量创建10个用户,要求stu1-stu5用户的UID分别为2001-2005stu6-stu10用户的家目录分别在/rhome/stu6-/rhome/stu10

#!/bin/bash
if [ -d /rhome ]    #判断是否存在/rhome目录
then
	echo "/rhome目录已经存在"   #若存在则输出“/rhome目录已经存在”
else
	mkdir /rhome  #若不存在则创建/rhome目录,且输出“/rhome不存在,已创建成功
	echo "/rhome不存在,已创建成功"  
fi
i=1
until [ $i -gt 5 ]   #判断i是否大于5,不大于5则进入循环
do
	useradd stu$i -u $[2000+$i] && echo "stu$i:123" | chpasswd && echo "stu$i创建成功"    #创建自定义用户编号的用户,id分别为2001-2005
	let i++    #i加1
done
until [ $i -gt 10 ]  #判断i是否大于10,不大于10则进入循环
do
	useradd stu$i -d /rhome/stu$i && echo "stu$i:123" | chpasswd && echo "stu$i创建成功" #创建自定义用户主目录的用户,主目录为/rhome/stu6-/rhome/stu10
	let i++
done

img

img

img

img


10.编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入,最后根据用户输入的信息输出相应的内容。

#!/bin/bash
input_fun(){            #定义一个函数
	input_var=""        #定义一个初始输入变量为空
	output_var=$1       #将参数给变量output_var
	while [ -z $input_var ]  #判断input_var是否为空,若为空,则继续执行
	do
		read -p "$output_var" input_var #若input_var一直为空则一直提示你
	done
	echo $input_var  #若input_var不为空表示已经有输入了,输出刚才输入值
}

name=`input_fun 请输入你的姓名:`   #调用函数,参数为“请输入你的姓名”
sex=`input_fun 请输入你的性别:`
age=`input_fun 请输入你的年龄:`

echo "你的姓名是$name"   #打印出用户信息
echo "你的性别是$sex"
echo "你的年龄是$age"

img

img

posted @ 2020-04-13 16:09  我想要打篮球  阅读(395)  评论(0编辑  收藏  举报