需要完整报告请在我主页里面的资源下载
湖北汽车工业学院实验报告
实验三 shell 脚本实验
一、实验目的
1.掌握bash的基本语法。
2.掌握bash的建立和执行方式。
3.熟悉shell脚本编程。
二、实验内容
1.编写Shell脚本文件,该文件的功能:从键盘输入年月,然后自动显示该年份下该月的日历,然后再显示系统当前的日期和时间。要求用3种不同方式执行该脚本。(3分)
参考程序:
$vi mycal(进入vi环境输入下列脚本程序)
echo “Please input year:”
read year #从键盘读入年份给year变量
echo “Please input month:”
read month #从键盘读入月份给month变量
cal $month $year
date
:wq!回车(保存文件并退出vi)
执行脚本方法:
方法一:输入定向到shell脚本(格式:$bash<脚本名)
$bash<mycal
结果:不能执行脚本。
原因: 因为输入命令有错误
方法二:以脚本名作为bash参数(格式:$bash 脚本名 [参数])
$bash mycal 回车
显示:
显示:
结果:
方法三:将shell脚本的权限设置为可执行,然后在提示符下直接执行。(用chmod命令)
$chmod a+x mycal #把mycal设置为对所有用户都有“执行”权限。
$PATH=$PATH:. #将脚本所在的目录添加到命令搜索路径(PATH)中。
$mycal #输入脚本名直接执行该脚本
显示:
显示:
结果:
注:cal 命令显示公园1~9999年中任意一年或任意一个月的日历。如果不带任何参数,则显示当前月份的日历。如果只有一个参数,则该参数被解释为年份。当有两个参数时,则第一个参数表示月份,第二个参数表示年份。两个参数之间应留有空格。年份要使用完整形式,如2006,不能写成06。
2.编写Shell脚本文件,要求从命令行接收数值参数,并计算这些参数的和。(1分)
参考程序:
$vi OSsy3_3(进入vi环境输入下列脚本程序)
x=0 #累加器变量清零
for y in $* #变量依次取位置参数的值,然后执行循环体中的命令表,至所有位置参数取完为止。
do
x=`expr $x + $y` #计算表达式x+y,并把计算结果赋给x。(累加器x=x+y)
done
echo "The sum is:$x"
:wq!回车(保存文件并退出vi)
执行脚本:
显示结果:(可截屏)
3.编写Shell脚本文件,使用case结构创建一个简单的菜单,屏幕显示菜单:
a. Current date and time
b. User currently logged in
c. Name of the working directory
d. Contents of the working directory
Enter a,b,c or d:
根据用户输入选项做相应操作,要求可以连续选择直到想退出时才退出。(1分)
参考程序:
while true
do
echo -e "\n COMMAND MENU\n"
echo -e "1. Current date and time\n"
echo -e "2. User currently logged in\n"
echo -e "3. Name of the working directory\n"
echo -e "4. Contents of the working directory\n"
echo -e "5. Exit\n"
echo -n "Enter selection:"
while true
do
read sel
if [[ "$sel" -lt 1 || "$sel" -gt 5 ]]
then
echo "Error input! Please input again:"
else
break
fi
done
case "$sel" in
1) date;;
2) who;;
3) pwd;;
4) ls;;
5) exit;;
*) echo -e "There is no selection $select\n";;
esac
echo
done
执行脚本:
显示结果:
4. 编写Shell脚本文件,要求从命令行输入5个数,在屏幕上显示其中最大数和最小数。(思考:如果改成从键盘输入给变量,而不是从命令行给出,如何实现?)(2分)
COUNT=1
SUM=0
MIN=0
MAX=100
while [ $COUNT -le 5 ]; do
read -p "请输入5个整数:" INT
if [[ ! $INT =~ ^[0-9]+$ ]]; then
echo "输入必须是整数!"
exit 1
elif [[ $INT -gt 100 ]]; then
echo "输入必须是100以内!"
exit 1
fi
SUM=$(($SUM+$INT))
[ $MIN -lt $INT ] && MIN=$INT
[ $MAX -gt $INT ] && MAX=$INT
let COUNT++
done
echo "sum: $SUM"
echo "min: $MIN"
echo "max: $MAX"
5. 编写Shell脚本文件,要求输入自己生日的月份和日期,计算还有多少天是自己的生日,如果生日日期已过,给出提示信息。(2分)
#!/bin/sh
read -p "Input your birthday(YYYYmmdd):" date1
m=`date --date="$date1" +%m`
d=`date --date="$date1" +%d`
date_now=`date +%s`
y=`date +%Y`
birth=`date --date="$y$m$d" +%s`
internal=$(($birth-$date_now))
if [ "$internal" -lt "0" ]; then
birth=`date --date="$(($y+1))$m$d" +%s`
internal=$(($birth-$date_now))
fi
awk -vinternal=$internal 'BEGIN{d=int(internal/60/60/24);h=int((internal-24*60*60*d)/3600);
print "There is : "d" days "h" hours."}'
三、实验总结和体会(1分)
答:在本次实验中我掌握了bash的基本语法在执行语句时根据shell脚本编程的文件设置参数,同时也需要熟悉shell脚本编程,根据题目需要来编写文件;最后掌握bash的建立和执行方式;本次实验收获很多,在课下也有练习,同时也感谢老师的辛勤付出,在今后的学习中也会更加努力。