湖北汽车工业学院实验报告
实验三 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
结果:不能执行脚本。
原因: 用输入重定向方式让shell从给定文件中读入命令行,并进行相应处理。这种方式不能从命令行读入参数,包括程序中有从键盘读入参数。
方法二:以脚本名作为bash参数(格式:$bash 脚本名 [参数])
$bash mycal 回车
显示:
方法三:将shell脚本的权限设置为可执行,然后在提示符下直接执行。(用chmod命令)
$chmod a+x mycal #把mycal设置为对所有用户都有“执行”权限。
$PATH=$PATH:. #将脚本所在的目录添加到命令搜索路径(PATH)中。
$mycal #输入脚本名直接执行该脚本
显示:
2.编写Shell脚本文件,要求从命令行接收数值参数,并计算这些参数的和。(1分)
参考程序:
$vi OSsy3_3(进入vi环境输入下列脚本程序)
x=0 #累加器变量清零
for y in $* #变量依次取位置参数的值,然后执行循环体中的命令表,至所有位置参数取完为止。
do
x=`expr $x + $y` #计算表达式x+y,并把计算结果赋给x。(累加器)
done
echo "The max 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 "1. Current date and time"
echo "2. User currently logged in"
echo "3. Name of the working directory"
echo "4. Contents of the working directory"
echo -e "5. Exit\n"
echo -n "Enter selection:"
while ture
do
read sel
if ["$sel" -lt 1 || "$sel" -gt 5]
then
echo "Error input! Please input again:"
else
break
fi
done
case "$sel" in
shell最简单脚本 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分)
#! /bin/bash
printf "Enter 5 number: "
read
max=$(echo "$REPLY" | tr ' ' '\n' | sort -rn | head -n1)
min=$(echo "$REPLY" | tr ' ' '\n' | sort -rn | tail -n1)
echo "max: $max"
echo "min: $min"
5. 编写Shell脚本文件,要求输入自己生日的月份和日期,计算还有多少天是自己的生日,如果生日日期已过,给出提示信息。(2分)
#!/bin/bash
read -p "please input your birthday(mmdd):" birthday
today=`date +%m%d`
if [ "$birthday" == "$today" ];then
echo "happy birthday!"
elif [ "$birthday" -gt "$today" ];then
year=`date +%Y`
total_day_s=$((`date --date="$year$birthday" +%s`-`date +%s`))
total_day=$(($total_day_s/60/60/24+1))
echo "your birthday is $total_day days away"
else
echo "birthday pass away!"
fi
三、实验总结和体会(1分)
在本次实验中,了解了基本的shell脚本编程的知识,比如:shell变量分为临时变量、位置变量、预定义变量和环境变量。Shell脚本编程有一些命令,常用的有read和echo等等,通过亲手实验了解到shell脚本编程和c语言编程还是有一定的区别的,我学到的有if开头,需要用fi结束。Case—esac等等。最大收获是练习了bash命令的使用和基本脚本的编写。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论