实验五 shell脚本编程

项目 内容
这个作业属于哪个课程 <班级课程的主页链接 >
这个作业的要求在哪里 作业要求链接地址
学号-姓名 17043212-龚雨豪
作业学习目标 1.了解shell脚本的概念及使用 ;2.掌握shell脚本语言的基本语法 ;3.学习简单的shell脚本编。

位置变量

位置参数变量 作 用
$n n 为数字,$0 代表命令本身,$1〜$9 代表第 1〜9 个参数,10 以上的参数需要用大括号包含, 如${10}
$* 这个变量代表命令行中所有的参数,把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区别对待
$# 这个变量代表命令行中所有参数的个数
参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 …$n"的形式输出所有参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数
$- 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
  1. 让用户输入一个字符串,如果用户输入的是 hello ,请输入 hello 用户姓名首字母缩写 ,否则输出请输入hello。
#!/bin/bash
read -p '请输入一个字符串:' str
if [ $str = "hello" ]
then
	echo "hello  crystal"
else
	echo "请输入hello"
fi

相关操作及程序说明截图如下:
实验五 shell脚本编程_第1张图片

实验五 shell脚本编程_第2张图片

实验五 shell脚本编程_第3张图片

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

read -p '请输入用户名:' user_name
id $user_name &> /dev/null 
if [ $? -eq 0 ] 
then
	echo "存在用户$user_name" 
else
	echo "不存在用户$user_name" 
fi

相关操作及程序说明截图如下:
实验五 shell脚本编程_第4张图片

实验五 shell脚本编程_第5张图片

  1. 编写脚本计算1-100之间的所有奇数和。
#!/bin/bash 

SUM=0 

for i in {1..100..2} 
do 
	let SUM=$SUM+$i 
done

echo "1-100之间的所有奇数和为: $SUM"

相关操作及程序说明截图如下:
实验五 shell脚本编程_第6张图片

实验五 shell脚本编程_第7张图片

  1. 编写脚本,判断键盘输入整数是否为质数。
#!/bin/bash
read -p '请输入一个正整数:' num
[ $num -eq 1 ] && echo '$num是质数'&&exit
[ $num -eq 2 ] && echo '$num是质数'&&exit
for i in `seq 2 $[$num-1]`
do
	[ $[$num%i] -eq 0 ] && echo "$num不是质数"&&exit
done
echo "$num是质数"&&exit

相关操作及程序说明截图如下:
实验五 shell脚本编程_第8张图片

实验五 shell脚本编程_第9张图片

  1. 模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作。
#!/bin/bash
cat <<-EOF
	h	显示命令帮助
	f	显示磁盘分区
	d	显示磁盘挂载
	m	查看内存使用
	u	查看系统负载
	q	退出程序
EOF
while true
do
	read -p "请选择需要操作的内容(help h):" action
	case $action in
		h)
			cat <<-EOF
				h	显示命令帮助
				f	显示磁盘分区
				d	显示磁盘挂载
				m	查看内存使用
				u	查看系统负载
				q	退出程序
			EOF
			;;                                                   
		f)
			lsblk
			;;
		d)
			df -h
			;;
		m)
			free -m
			;;
		u)
			uptime
			;;
		q)
			exit
			;;
	esac
done

相关操作及程序说明截图如下:
实验五 shell脚本编程_第10张图片

实验五 shell脚本编程_第11张图片

实验五 shell脚本编程_第12张图片

实验五 shell脚本编程_第13张图片

实验五 shell脚本编程_第14张图片

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

①shift实现:

#!/bin/bash
SUM=0
while [ $# -ne 0 ]
do
	let SUM=$SUM+$1
	shift
done
echo SUM=$SUM

相关操作及程序说明截图如下:
实验五 shell脚本编程_第15张图片

实验五 shell脚本编程_第16张图片

②for循环实现:

#!/bin/bash
SUM=0
for i
do
	let SUM=SUM+$i
done
echo SUM=$SUM

相关操作及程序说明截图如下:
实验五 shell脚本编程_第17张图片

实验五 shell脚本编程_第18张图片

  1. 编写脚本,生成一个phonenumber.txt文件,文件内容为随机产生以139开头的手机号1000个,每个手机号占一行。
#!/bin/bash
file=./phonenumber.txt
for ((i=1;i<=1000;i++))
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
done

相关操作及程序说明截图如下:
实验五 shell脚本编程_第19张图片

实验五 shell脚本编程_第20张图片

  1. 在第7题产生的1000个电话号码中抽取5位幸运号码,并显示,要求只显示前3三位数字和后4位数字,中间四位用*代替。
#!/bin/bash
phone=./phonenumber.txt
for ((i=1;i<=5;i++))
do
	line=`wc -l $phone | cut -d' ' -f1`
	luck_line=$[RANDOM%$line+1]
	luck_number=`head -$luck_line $phone | tail -1`
	echo "139****${luck_number:7:4}"
	echo $luck_number >> luck.txt
	sed -i "/$luck_number/d" $phone
done

相关操作及程序说明截图如下:
实验五 shell脚本编程_第21张图片

实验五 shell脚本编程_第22张图片

  1. 使用 until 语句批量创建10个用户,要求 stu1-stu5 用户的 UID 分别为 2001-2005 , stu6-stu10 用户的家目录分别在 /rhome/stu6-/rhome/stu10。
#!/bin/bash
if [ -d /rhome ]
then
	echo "/rhome目录已存在"
else
	mkdir /rhome
	echo "/rhome不存在,已创建成功"
fi
i=1
until [ $i -gt 5 ]
do
	useradd stu$i -u $[2000+$i] && echo "stu$i:123" | chpasswd && echo "stu$i创建成功"
	let i++
done
until [ $i -gt 10 ]
do
	useradd stu$i -d /rhome/stu$i && echo "stu$i:123" | chpasswd && echo "stu$i创建成功"
	let i++
done

相关操作及程序说明截图如下:
实验五 shell脚本编程_第23张图片

实验五 shell脚本编程_第24张图片

实验五 shell脚本编程_第25张图片

注意这里创建用户要在 root 用户权限下执行脚本,我们可以用 su ( CentOS )或者 sudo su ( Ubuntu ),注
意不要加 - ,我们还是在当前目录操作。

另外,删除所创建的用户可利用如下程序进行操作:

for i in {1..10};
do
  userdel -r stu$i;
done                                         #删除所创建的用户
  1. 编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入,最后根据用户输入的信息输出相应的内容。
#!/bin/bash
input_fun(){
	input_var=""
	output_var=$1
	while [ -z $input_var ]
	do
		read -p "$output_var" input_var
	done
	echo $input_var
}

name=`input_fun 请输入你的姓名:`
sex=`input_fun 请输入你的性别:`
age=`input_fun 请输入你的年龄:`

echo "你的姓名是$name"
echo "你的性别是$sex"
echo "你的年龄是$age"

相关操作及程序说明截图如下:
实验五 shell脚本编程_第26张图片

实验五 shell脚本编程_第27张图片

写在最后,这里有几个可能遇到的小问题:
1.在vim进入程序编辑时,有时候无法像平常一样进行空格等操作,可以先“Esc”,再“i”,即可正常操作;
2.在进入root权限后,我们若要退出有如下几种方法:
(1)使用su root的退出方法:
①输入su 用户名,回zhidao车。
②输入此回用户密码,回车即可切换回此用户。
(2)使用sudo -i的退出方法:
①输入exit回车,退出即可。
②如果运行了其它需要退出的命令,可能要输入多次exit依次退出。
③直接使用logout也可以退出。

你可能感兴趣的:(实验五 shell脚本编程)