lab2
- 编写 shell 脚本 p1.sh,完成向用户输出“Hello!”的问候语。并根据实验的时间,分别给出:“上午好!”或者“下午好!”或者“晚上好!”的问候。 提示:使用 date 取得当前的时间,并对 date 进行格式化取得当前时间中的小时, 根据当前的小时来判断上午、下午还是晚上。1-11 点上午,12-18 点下午,19-24 点晚上。

- 等号两边不能有空格
- 与数字比较时数字也要加" "
- 记得fi
-
编程完成 shell 脚本 p2.sh:如果存在 p1.sh 文件,则输出信息:p1.sh 文件已 经存在,并询问是否允许?如果用户回答:要运行,那么给出运行结果;如回到 不要运行,则退出程序。如果 p1.sh 不存在,则提示用户先创建文件并退出。

-
编写 shell 脚本,按要求打印输出乘法口诀表,输出用两种方式完成:一种是 直接在控制台输出;另一种是输出至文件 result.txt。
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

- 输出重定向就是>> result.txt
- 注意需要用到\c实现不换行以及echo换行
lab3
- 生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
猜小了或猜大了,直至用户猜对脚本结束。(提示:RANDOM 为系统自带的系统变量,
值为 0‐32767 的随机数,使用取余算法将随机数变为 1‐100 的随机数)

- 注意要再次读取输入
- 使用 shell 脚本编写一函数 add 求两个数的和,要求这两个数用位置参数传入,最后
输出结果。

- 注意要在sh文件末尾调用函数并传入参数
- 编写一个 shell 脚本,实现如下功能:把第二个位置参数及其以后的各个参数指定的
文件复制到第一个位置参数指定的目录中。

- 用到了shift。位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。
- 用到了“$@”获取所有输入参数
- 编写脚本模拟实现交互式文件目录操作,实现命令包括:dir-列出当前目录下的文件和子目录;cd-切换目录;wcd-显示当前工作目录;create-创建一个文件;delete-删 除一个文件;rename-重命名文件;newdir-创建目录;deldir-删除目录;exit-退出系统。(提示:可使用 select 命令实现交互操作,题目中要求实现的命令可用 Linux shell中相关的命令模拟实现,如 dir 可用使用 ls 命令实现)。


- 读取所需要的参数即可
lab4
awk教程
- 基本用法

- 变量
- NR 当前处理行
- FILENAME:当前文件名
- FS:字段分隔符,默认是空格和制表符。
- RS:行分隔符,用于分割每一行,默认是换行符。
- OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
- ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
- OFMT:数字输出的格式,默认为%.6g。
- 函数
- tolower():字符转为小写。
- length():返回字符串长度。
- substr():返回子字符串。
- sin():正弦。
- cos():余弦。
- sqrt():平方根。
- rand():随机数。
- 条件

- if语句

- 针对以下文本内容的操作,请写出相关的 awk 命令
Beth 4.00 0
Dan 3.75 0
Kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18
(1) 当第 3 列大于 0 时,输出文本中对应行的第 1 列和第 2 列与第 3 列之积

- 将数据存入data.txt 用输入重定向读取
(2) 统计第 3 列大于 15 的行数,记为 X,并以下列格式输出 “X
employees worked more than 15 hours.”

- 直接作为awk的参数传入data.txt也行
- 创建了变量X 并设置了X增长的条件
- BEGIN{} (执行前运行) {}(执行中运行) END{}(执行后运行) 是awk常用的三个环节
(3) 使用特殊变量 NR、NF,统计输出整个文本的行数、单词数和字符数
awk '{words=words+NF;chars=chars+length($0)} END{print "行数:",NR,"单词数:",words,"字符数目:",chars}' data.txt

- 变量初始化为0
- 使用 awk 统计/etc/passwd 文件中,
(1) 登陆 shell 为“/sbin/nologin”的用户个数
cat /etc/passwd | awk -v i=0 -F ':' '{if ($NF=="/sbin/nologin") i=i+1} END{print i}'
- $NF就是一行数据最后一列的那个值
- 注意-F 和-v之间要用空格分开 不然会有错
cat /etc/passwd | awk -F ':'-vi=0 '{if ($NF=="/sbin/nologin")i=i+1}END{print i}'
#wrong
cat /etc/passwd | awk -F ':' -vi=0 '{if ($NF=="/sbin/nologin")i=i+1}END{print i}'
# true
(2) 用户名包含’g’的用户,打印出用户名和 UID
$ cat /etc/passwd | awk -F : '{print $1,$3}'|awk -F : '/g/{print $1$2}'
- 先将用户名和UID提取出来,再对用户名做正则匹配
- 使用 awk 统计当前文件夹下,文件总的大小
ls -l | awk -vdata=0 '{data+=$5}END{print"total size:",data,"Bytes"}'
- 将ls的输出用管道输入awk
sed菜鸟教程
Linux sed 命令是利用脚本来处理文本文件,主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或–expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或–help 显示帮助。
-n或–quiet或–silent 仅显示script处理后的结果。
-V或–version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
- 针对下列文本内容,使用 sed 命令完成以下操作
4000001476
4000000041
4000002754
4000000944
4000002549
(1) 将文本内容中每行中的 400 替换为 800 显示,即输出如下:
8000001476
8000000041
8000002754
8000000944
8000002549
cat data.txt | sed 's/400/800/g'
- g 标识符表示全局查找替换
- s 替换
(2) 使用正则表达式,将文本内容中每行的前三个数字,以小括号括起来
显示, 即输出如下:
(400)0001476
(400)0000041
(400)0002754
(400)0000944
(400)0002549
cat data.txt | sed -r 's/(^[0-9]{3})/(\1)/g'
- 如果没有-r参数,除非每个括号都使用\字符进行转义,否则反向引用(如\1)将不起作用。
对于-r,参数反向引用(如\1)将不起作用,除非圆括号没有转义。 - \1表示被前面第一个括号框住的部分匹配的内容
(3) 使用正则表达式,将文本内容中每行的中间三个数字前后增加“-”
符号, 即输出如下:
400-000-1476
400-000-0041
400-000-2754
400-000-0944
400-000-2549
cat data.txt | sed -r 's/(^[0-9]{3})([0-9]{3})/\1-\2-/g'
- 需要匹配两块
(4)打印输出第 3 行到最后一行的内容,即输出:
4000002754
4000000944
4000002549
cat data.txt | sed -n '3,$p'
- $ 表示最后一行
- p选择性输出
- 下列命令的输出结果是什么?
echo “123 abc” | sed –r 's/[0-9]+/& &/’
123 123 abc
(& 保存查找串以便在替换串中引用)







318

被折叠的 条评论
为什么被折叠?



