试验编号: _01_
四川师大 实验报告 2010 年 9月
18日
计算机科学学院 2008 级3 班
姓名:余乐坤 学号:2008110359 指导老师: 实验成绩:
实验二 Shell编程试验
1. 目的要求
(1) 熟悉Shell环境和常用功能;
(2) 掌握Shell基本语法结构,并能编写简单的Shell程序。 (3) 独立完成Shell课程设计——CD Manager 2. 实验内容
(1) 命令补齐功能
? 用date命令查看系统当前时间,在输入da后,按tab键,让shell自动补
齐命令的后半部分。
? 用mkdir命令创建新的目录。首先输入第一个字母m,然后按tab键,由
于以m开头的命令太多,shell会提示是否显示全部的可能命令,输入n。
? 再多输入一个字母k,按tab键,让shell列出以mk开头的所有命令的列
表。
? 在列表中查找mkdir命令,看看还需要多输入几个字母才能确定mkdir这
个命令,然后输入需要的字母,再按tab键,让shell补齐剩下的命令。
? 最后输入要创建的目录名,按回车键执行命令。 ? 多试几个命令利用tab键补齐。 (2) 命令别名功能
? 输入alias命令,显示目前已经设置好的命令的别名。 ? 设置别名ls为ls –l,以长格形式显示文件列表:#alias ls=?ls -l‘。 ? 显示别名ls代表的命令,确认设置生效:#alias ls。 ? 使用别名ls显示当前目录中的文件列表。 ? 在使定义的别名不失效的情况下,使用系统的ls命令显示当前目录中的命
令列表:#\\ls。
? 删除别名ls:unalias ls。 ? 显示别名ls,确认删除别名已经生效:alias ls。 ? 最后再用命令ls 显示当前目录中的文件列表。 ? 写出定义别名cd为cd /etc的命令 alias cd='cd /etc' 。 (3) 输出重定向
? 用ls命令显示当前目录中的文件列表:#ls –l。
使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到文件list中:ls –l > list。
? 查看文件list中的内容,注意在列表中会多出一个文件list,其长度为0。这
说明shell是首先创建了一个空文件,然后再运行ls命令:cat list。
? 再次使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重
定向到文件list中。这次使用管道符号>>进行重定向:ls –l >> list。
? 查看文件list的内容,可以看到用>>进行重定向是把新的输出内容附加在
文件的末尾,注意其中两行list文件的信息中文件大小的区别:cat list。
? 重复命令 ls –l > list。 ? 再次查看文件list中的内容,和前两次的结果相比较,注意list文件大小
和创建时间的区别,完成课后第一题。
(4) 输入重定向
? 使用输入重定向,把上面生成的文件list用mail命令发送给自己: mail root
< list。
? 查看新邮件,看看收到的新邮件中其内容是否为list文件中的内容。 (5) 管道
? 利用管道和grep命令,在上面建立的文件list中查找字符串list: cat list
| grep list。
? 利用管道和wc命令,计算文件list中的行数、单词数和字符数:#cat list | wc。 ? 查看和修改Shell变量 ? 用echo命令查看环境变量PATH的值:#echo $PATH。 ? 设置环境变量PATH的值,把当前目录加入到命令搜索路径中去:#PATH
=―$PATH:.‖。
? 用echo命令查看环境变量PATH的值:#echo $PATH。 ? 比较前后两次的变化。 (6) 简单的shell程序
? 习题1:使用Vi将程序menu.sh程序补充完善。 #!/bin/bash
echo \cat<<-ENDIT
#[N]ew a file #[E]dit a file #[D]elete a file #[Q]uit ENDIT read choice
case \
N) echo \ read value
touch $value ;;
E) echo \ read value
?
vi $value ;;
D) echo \ read value
rm $value ;;
Q) TERM=quit
echo \ ;; Esac
思考:执行程序,写出程序的执行结果。
______________________________________________________________________通过选项可以新建,删除 ,编辑文件和退出。
______________________________________________________________________________________________________________________________________ ?
习题2:变量替换(在横线上为语句添加相应的解释)
#!/bin/bash # 打开bash shell解析器 # This is the first Bash shell program of the day. # Scriptname: greetings
# Written by: Barbara Bashful
echo \ # 打印出包括登录名的欢迎字符串 echo \ # 提示当前路径 echo \ # 显示当前机器的节点名字 ls # List files in the present working directory # 显示当前路径包含的文件 echo \ # 显示当前时间和用户名 思考:执行程序,写出程序的执行结果。
______________________________________________________________________
___________________________________________________________________________________________________ ?
习题3:位置变量的设定及使用(在横线上为语句添加相应的解释)
# !/bin/bash
# Scriptname: args
# Script to test command-line arguments
echo The name of this script is $0. #显示当前程序的名称
echo The arguments are $*. #显示传递给程序的所有参数 echo The first argument is $1. #显示第一个参数 echo The second argument is $2. #显示第二个参数 echo The number of arguments is $#. #显示参数个数
oldargs=$* #将参数一字符串的形式赋值给变量oldargs set Jake Nicky Scott # 将Jake Nicky Scott设置为参数变量 echo All the positional parameters are $*. #打印出当前新的所有变量 echo The number of positional parameters is $#. #显示新变量的个数 echo \–bye for now, $1.\ # 向Jake说拜拜 set $(date) #将当前时间设置为参数变量 echo The date is $2 $3, $6. #打印出月,日,时的信息 echo \ #打印出oldargs的值 set $oldargs # 将oldargs的值重新设置为参数变量 echo $1 $2 $3 #显示新的前三个参数变量 思考:执行程序,写出程序的执行结果。__
______________________________________________________________________________________________ ?
习题4:深入理解let 命令的用法。比如我们可以用+=、(())等方式来实现运算符,并在横线上写明运算结果
(1)$ i=5
$let i=5 i=5 (2)$ let i=i+1
$ echo $i 6
相关推荐: