一、实验目的
1. 熟悉shell环境的使用。
2. 熟悉文本工具的使用。
二、实验环境
虚拟Linux主机,远程工具putty
三、实验过程
(一)准备
1.启动主机Linux,以yanji登录。
2.创建文件consume.txt。
命令:cat > consume.txt
01 刘校明 广州 1550 400
02 邓子丽 深圳 1500 500
03 林静聪 深圳 1450 600
04 庄勇添 湛江 1350 350
05 李家鹏 梅县 1050 750
06 梁舒昊 湛江 950 650
07 叶国林 湛江 1200 550
08 苏启业 深圳 1600 500
09 李伟敏 广州 1400 400
10 周晨 梅县 1000 400
11 黎峰婷 深圳 1700 600
12 庄晓 梅县 1350 300
13 陈炜志 广州 1400 550
14 叶泳敏 广州 1650 450
15 杨靖莉 梅县 1450 500
(二)理解环境变量PATH
1.创建脚本
命令:cat > greet
输入:
#! /bin/bash
echo "Hello,$1"
命令:
chmod +x greet
2.不指定路径执行
命令: greet Mary
输出:-bash: greet: command not found
解释:执行失败是因为没有指定路径,出现了-bash: greet: command not found的错误。
./表示当前目录,由于自己编写的脚本在当前目录,而当前目录不在环境变量中,所以要指定路 径才可以执行。
3.查看环境变量
命令: echo $PATH
输出:
/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/yanji/bin
4.指定路径执行
命令:./greet Mary
输出:Hello,Mary
(三)元字符
1.屏蔽元字符
命令:echo <html>
输出:-bash: syntax error near unexpected token `newline'
命令:echo "<html>"
输出:<html>
2.单引、双引和反转义
命令: y=500
echo "y = $y"
输出:y = 500
解释:$引用变量,""双引号不会屏蔽`、\和$这三个Shell元字符的含义。
命令:echo 'y = $y'
输出:y = $y
解释:单引号实现屏蔽Shell元字符的功能。
命令: echo "y = \$y"
输出: y = $y
解释:\显示字符本身,屏蔽了字符的功能,因此$就失去了引用变量的功能。
3.命令替换
命令: h=`date +%H`
echo $h
输出:10
命令:ip=`hostname -I | awk '{print $1}'`
echo $ip
输出:192.168.139.3
解释:反引号进行命令替换,是Shell可以将命令字符替换为命令执行的结果的输出的内容。
(四)文本工具
1.grep
命令: grep "10" consume.txt
输出: 05 李家鹏 梅县 1050 750
10 周晨 梅县 1000 400
解释:匹配一行中带有10字样的记录
命令: grep "^10" consume.txt
输出: 10 周晨 梅县 1000 400
解释:匹配以10开头的记录
命令:grep "450" consume.txt
输出:03 林静聪 深圳 1450 600
14 叶泳敏 广州 1650 450
15 杨靖莉 梅县 1450 500
解释:匹配一行中带有450的字样的记录
命令:grep "450$" consume.txt
输出:14 叶泳敏 广州 1650 450
解释:匹配以450结束的记录
2.输出consumer.txt中月伙食费(第四列)低于1300的记录。(awk)
命令:awk '$4<1300 {print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $5}' consume.txt
输出:05 李家鹏 梅县 1050 750
06 梁舒昊 湛江 950 650
07 叶国林 湛江 1200 550
10 周晨 梅县 1000 400
3.输出consumer.txt中月伙食费最高的前三名。(sort)
复习:sort -r -k 4 consumer.txt -o text.txt
cat -n text.txt | awk '$1<04 {print$1 "\t" $2 "\t" $3 "\t" $4 "\t" $5 "\t" $6}'
或
head -3 text.txt | awk ' {print$1 "\t" $2 "\t" $3 "\t" $4 "\t" $5}'
1 06 梁舒昊 湛江 950
2 11 黎峰婷 深圳 1700
3 14 叶泳敏 广州 1650
4 08 苏启业 深圳 1600
命令:方法1: awk '$1<=03 {print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $5}' consume.txt | sort -u
方法2: sort -u consume.txt | awk '$1<04'
输出:01 刘校明 广州 1550 400
02 邓子丽 深圳 1500 500
03 林静聪 深圳 1450 600
解释:一个是先输出了以第一列序号小于04的输出后再排序;另外一个是先排序再输出,结果都是一样的。