文章目录
- 一、实验目的
- 二、实验要求
- 三、实验内容
- 1、通配符的使用
- 2、重定向
- 3、管道
- 4、shell变量
- 5、建立下面的脚本,运行并分析输出结果,并给出代码注释。
- 6、编写脚本
一、实验目的
1.为文件扩展名使用通配符
2.标准输入、标准输出和标准错误的重定向
3.使用管道将一个进程的输出作为输入提供给另一个进程。
4.执行命令分组和行继续
5.编写shell 脚本。
二、实验要求
1、管道(pipe-line)的使用
执行格式: command1|command2
功能:将command1的执行结果送到command2 作为输入
2、标准输入控制
执行格式: command-line<file 将file作为command-line的输入
3、标准输出控制
执行格式一: command>filename
功能:将command的执行结果送至指定的filename中
执行格式二: command>!filename
功能:同上,若filename文件已存在,则强迫重写
执行格式三:command>>filename
功能:将command 的执行结果,附加(append)到filename
4、shell脚本的调试方法:
(1)输入重定向到shell脚本
格式:$ bash < 脚本名
(2)以脚本名作为bash参数
格式:$ bash 脚本名 [参数]
(3)在提示符下直接执行
方法:先利用chmod命令将脚本文件设置为可执行权限;然后,将该脚本所在的目录添加到命令搜索路径中
(4)将shell脚本的权限设置为可执行,然后在提示符下直接执行
方法:
先利用chmod命令将脚本文件设置为可执行权限
三、实验内容
1、通配符的使用
(1)进入/etc目录并且将此处所有文件以列表显示
$ cd /etc
$ ls(或者$ echo *)
(2)要求用带有通配符的ls命令来显示文件名,实现:
-以conf结束
ls *conf
-以d 或D开始
ls [dD]*
-在文件名的第五个位置包括一个o
ls -d ????o*
-包含单词tab
ls -d *tab*
-以数字结尾
ls -d *[0~9]
-不以数字结尾
ls -d *[!0~9]
(3)如果你执行命令ls -d ?[!y]*[e-f]将会发生什么情况?能与之匹配的最短文件名是什么?执行这些命令来验证你的答案。
第一个位置匹配任意一个字符,第二个位置字符不是y,第二个位置之后到最后一个位置之间任意字符串,最后一个位置字符是e或者f。
2、重定向
(1)使用cat命令和指令来创建一个包含几行文本名为junk的文件。
(2)使用重定向junk文件中追加几行文本。然后查看junk文件的内容并且检查你刚刚所创建的文本是否都存在。
3、管道
(1)统计你当前目录所有文件的数目。使用管道,而不是手动地统计所有文件
(2)ls > tempfile ; wc -l tempfile是否和你刚刚使用的管道功能相同?为什么或者为什么不?
不同,管道功能不需要新的文件,本题的操作创造了新的文件tempfile。
(3)将多个用户文件联合为一个大文件。
4、shell变量
(1)显示由你当前进程环境所定义的所有变量。并且显示出当前输出的所有变量。
$ set
(2)创建一个变量x并初始化值为10。检查这个变量的值。再次,显示当前进程环境的所有变量。
(3)创建一个subshell.查看变量x在subshell下的值是什么?
(4)将x设置为500并返回到父进程。当前x的值是什么?为什么?
x=10的值保存在父进程中,x=500的值保存在了子进程中,互不继承。
(5)确保子进程继承了x。如何实现?
5、建立下面的脚本,运行并分析输出结果,并给出代码注释。
(1)ex1
#!/bin/bash //所使用shell的绝对路径名,表示由bash脚本编写,从而应调用相应的解释程序予以执行
#shell special character //“#”开头正文行表注释
echo "current directory is `pwd`" //显示current directory is 当前目录的绝对路径
echo "current directory is 'pwd'" //显示current directory is 'pwd'
echo "home directory is $HOME" //显示home directory is 当前用户
echo "file*.?" //显示file*.?
today=`date` //将命令date赋给变量today
echo Today is :$today //显示Today is :此刻的日期
ls ex* //显示当前目录中文件名是以ex打头的文件
(2)ex2
#!/bin/bash
#bash script programming
if test $# == 0 //参数个数为0
thenls -l|grep '^d' //显示当前目录中的所有文件夹信息
elsefor idols -l $i|grep '^d' //显示各个参数目录中的所有文件夹信息done
fi
(3)ex3
case $1 in //选择 -b或者-s如果什么都不选就进入*)
-b) count=`grep ^b $2 | wc -l`
echo "The number of lines in $2 that start with b is $count.";;
//显示The number of lines in 给出的文件 that start with b is 第几行
-s) count=`grep ^s $2 | wc -l`
echo "The number of lines in $2 that start with s is $count.";;
//显示The number of lines in 给出的文件 that start with s is 第几行
*) echo "That option is not recognized.";;
//显示That option is not recognized.
esac //关闭case
6、编写脚本
(1)编写shell 脚本,计算1-100 的和;
(2)编写shell 脚本,要求输入一个数字,然后计算出从1 到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;
(3)编写shell 脚本,把/home目录下的所有目录拷贝到/tmp目录下;