深圳大学实验报告课程名称:Linux操作系统
实验项目名称:Linux上shell程序设计学院:计算机与软件学院
专业:
指导教师:冯禹洪
报告人:学号:班级:
实验时间:
实验报告提交时间:
教务处制
一、实验目标:
1. 熟悉vi编辑器的使用
2. 掌握简单的Shell编程
2.1. 掌握Shell变量的使用
2.2. 掌握Shell表达式的使用
2.3. 掌握Shell流程控制语句的使用
3. 熟悉Shell程序的执行和跟踪
二、实验环境与工件
湖边Linux实验室
Fedora 13
三、实验内容与步骤:
准备工作:如果当前系统已经有学生名字加学号命名的账号,则直接以该账号登录,然后转2,一次完成后面的实验内容。
i.创建一个以学生名字加学号命名的账号,不如,学生名字
为张山,学号为123,则操作如下:
#useradd zhangshan123
#passwd zhangshan123
然后以zhangshan123名字登录
ii.在主目录下
a)创建文件夹:ShellProgram
$mkdir ShellProgram
b)进入ShellProgram子目录
$cd ShellProgram
iii.请根据自己对Linux的熟悉程度选做题(一)或题(二)
题(一)
1. 下面哪个命令会实现将变量V AR1和V AR2相加,并且值存入变量V AR3的功能?()(5分)
A.[ $VAR3 = $VAR1 + $VAR2 ]
B.$VAR3 = [ $VAR1 + $VAR2 ]
C.$VAR3 = (( VAR1 + VAR2 ))
D.(( VAR3 = VAR1 + VAR2 ))
2. 以下程序的输出是?()(5分)
#!/usr/bin/sh
A=1
while [ $A -lt 10 ]
do
B=1
while [ $B -lt 10 ]
do
break 2
echo "Inner loop"
done
echo "Outer loop"
done
A.“Inner l oop” 将被打印10次
B.“Outer l oop” 将被打印10次.
C.“Outer l oop” 将被打印10次.
D.什么都没有被打印.
3. 请在vi中逐一编辑,修正(如果有误)并执行以下10个shell脚本程序,然后结合所学知识和程序的输出理解各程序中各语句的含义,对各小题附上结果截图。(每小题5分)
3.1. 编写一个简单的回显用户名的shell程序。
#!/bin/bash
#filename:date
echo "Mr.$USER,Today is:"
echo 'date'
echo Whish you a lucky day!
3.2.使用if-then语句创建简单的shell程序。
#!/bin/bash
#filename:bbbb
echo -n "Do you want to continue: Y or N"
read ANSWER
if [ $ANSWER=N -o $ANSWER=n ]
then
exit
fi
3.3.使用if-then-else语句创建一个根据输入的分数判断是否及格的shell程序。#!/bin/bash
#filename:ak
echo -n "please input a score:"
read SCORE
echo "You input Score is $SCORE"
if [ $SCORE -ge 60 ];
then
echo -n "Congratulation!You Pass the examination."
else
echo -n "Sorry!You Fail the examination!"
fi
echo -n "press any key to continue!"
read $GOOUT
3.4.使用case语句创建一个菜单选择的shell程序。
#!/bin/bash
#filename:za
#Display a menu
echo _
echo "1 Restore"
echo "2 Backup"
echo "3 Unload"
echo
#Read and excute the user's selection
echo -n "Enter Choice:"
read CHOICE
case "$CHOICE" in
1) echo "Restore";;
2) echo "Backup";;
3) echo "Unload";;
*) echo "Sorry $CHOICE is not a valid choice
exit 1
esac
3.5.使用for语句创建简单的shell程序。
#!/bin/bash
#filename:mm
for ab in 1 2 3 4
do
echo $ab
done
3.6.使用for语句创建求命令行上所有整数之和的shell程序。
#!/bin/bash
#filename:qqq
sum=0
for INT in $*
do
sum='expr $sum + $INT'
done
echo $sum
3.7.使用while语句创建一个计算1-5的平方的shell程序。
#!/bin/bash
#filename:zx
int=1
while [ $int -le 5 ]
do
sq='expr $int \* $int'
echo $sq
int='expr $int + 1'
done
echo "Job completed"
3.8.使用while语句创建一个根据输入的数值求累加和(1+2+3+4+…+n)的shell程序。#!/bin/bash
#filename:sum
echo -n "Please Input Number:"
read NUM
number=0
sum=0
while [ $number -le $NUM ]
do
echo number
echo "$number"
number=' expr $number + 1 '
echo sum
echo "$sum"
sum=' expr $sum + $number '
done
echo
3.9.使用until语句创建一个计算1-5的平方的shell程序。
#!/bin/bash
#filename:xx
int=1
until [ $int -gt 5 ]
do
sq='expr $int \* $int'
echo $sq
int='expr $int + 1'
done
echo "Job completed"
3.10.使用until语句创建一个输入exit退出的shell程序。
#!/bin/bash
#filename:hk
echo "This example is for test until....do "
echo "If you input [exit] then quit the system "
echo -n "please input:"
read EXIT
until [ $EXIT = "exit" ]
do
read EXIT
done
echo "OK!"
4. 写一个Shell脚本,接收两个文件名作为参数。该脚本将检查两个文件内容是否一样,如果一样就删除第二个文件。请附程序和运行结果截图(5分)
参考代码:
测试:
5. 写一个Shell脚本来检查当前目录中所有文件的可执行权限,如果存在一个文件没有可执行权限,则为其添加可执行权限。请附程序和运行结果截图(5分)
参考代码:
测试:
6. 编写一个shell脚本,输入1 – 10之间的一个数,并判断它是否小于5。请附程序和运行结果截图,请注意程序的易读性。(10分)
7. 编写一个shell脚本,随机输入5个数,打印出了值为3的倍数的所有数。(20分)
题(二)
1.编写shell脚本将当前目录下大于10k的文件转移到/tmp目录下(30分)
# vi 10K.sh
#!/bin/bash
#ext-1
#Using for move currently directory to /tmp
for Filename in $(ls -l |awk '$5 > 10240 {print $9}')
do
mv $Filename /tmp
done
ls -la /tmp
echo "Done!"
2.设计一个Shell程序,在~/data/目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。(30分)
#!/bin/bash
#7.sh
#file executable: chmod 755 7.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
for ((i=1;i<=50;i++))
do
mkdir -p /usrdata/user$i
cd /usrdata
chmod 754 user$i
done
3.找出系统内大于50k,小于100k的文件,并用长格式显示它们的详细属性.(40分) 四、实验结果
五、实验总结与体会
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。