- 编写 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换行
- 生成一个 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 命令实现)。
- 读取所需要的参数即可
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


