Shell编程

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Shell编程

01. 如何获取一个文件每一行的第三个元素?

答案: # awk '{print $3}' 文件名 备注:awk支持按列输出,通过内置变量$1,$2,$3…可以单独显示任意列,默认列是以 空格或Tab缩进为 分隔符,也可以使用-F选项指定其他分隔符。

02. Shell函数能解决什么实际问题?

答案: 定义函数的格式: function 函数名{ 代码块 } 函数名(){ 代码块 } 使用函数可以避免代码重复 使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强

03. 使用awk统计httpd访问日志中每个客户端IP的出现次数?

答案: # awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log 备注:定义数组,数组名称为ip,数字的下标为日志文件的第1列(也就是客户端的IP地址),++的目的 在于对客户端进行统计计数,客户端IP出现一次计数器就加1。END中的指令在读取完文件后执行,通过 循环将所有统计信息输出。

04. 哪些方式可以将标准输出和错误输出重定向到文件?

答案: # 命令 &> 文件名 # 命令 > 文件名1 2> 文件名2 # 命令 > 文件名 2>&1 # 命令 &>> 文件名 # 命令 >> 文件名1 2>> 文件名2 # 命令 >> 文件名 2>&1

05. 正则表达式符号: *、+、?、[]、[^]、{n}分别代表什么含义?

答案: 表示匹配前面的字符出现了任意次(包括0次) 表示匹配前面的字符出现了至少1次(1次或多次) ? 表示匹配前面的字符出现了0次或1次 [] 表示集合,匹配集合中的任意单个字符 [^] 表示对集合取反 {n} 表示精确匹配前面的字符出现了n次

06. Shell中对变量字串进行截取的方式有哪些?

答案: # echo ${变量名:开始位置:长度} #注意,起始位置从0开始 # expr substr $变量名 开始位置 长度 #注意,起始位置从1开始 # echo $变量名 | cut -b 开始位置-结束位置 #注意,起始位置从1开始

07. 使用sed命令如何将文件中所有的大写字母Q转换为小写字母q?

答案: # sed -i 's/Q/q/g' 文件名

08. 执行如下命令会对test.txt文件产生什么样的影响?

# sed -i 's9\945\9\99\98\939g' test.txt

答案: 将test.txt文件中94599替换为9893

09. 工作中你都写过什么脚本?

答案:

监控脚本(监控系统、监控服务、监控硬件信息、监控性能、安全监控等)

系统初始化脚本(创建目录,创建账户,安装软件包,设置权限,修改内核参数等)

一键部署(源码安装脚本)

备份脚本(自动备份数据库,备份网站数据,备份日志,备份配置文件等)

日志分析脚本(分析日志数据,汇总并统计相关信息,如PV、UV等)

10. 编写脚本,用户输入密码,脚本判断密码是否正确,输入正确则 提示正确,连续输入错误密码3次,则报警?

答案:

# vim test.sh #!/bin/bash init=123456 for i in {1..3} do read -p "请输入密码:" pass if [ $pass == $init ];then echo "密码正确" break fi done echo "警告:密码错误"

11. 编写脚本,自动生成一个8位随机密码?

答案:

vim test.sh #!/bin/bash Str="abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345 6789" pass="" for i in {1..8} do num=$[RANDOM%${#Str}] tmp=${Str:num:1} pass+=$tmp done echo $pass

12. 日志过滤? 从日志/opt/bjca3/logs/ca_access.log中截取14点到16点的日志,将截取的日志导入 到/tmp/ca_access.txt中,日志格式如下

[Fri Mar 17 13:59:00 2017] [debug] mod_cmp.c(1600):[client 192.168.97.8] [CMP]
CMP_set_status: starting …
[Fri Mar 17 13:59:00 2017] [debug] mod_cmp.c(938):[client 192.168.97.8] [CMP]
CMP_cu_integer_set: starting …
[Fri Mar 17 13:59:00 2017] [debug] mod_cmp.c(957):[client 192.168.97.8] [CMP]
CMP_cu_integer_set: ending ok …
………
[Fri Mar 17 16:36:00 2017] [debug] mod_cmp.c(1014):[client 192.168.97.8] [CMP]
cu_octet_str_set: starting …
[Fri Mar 17 16:36:00 2017] [debug] mod_cmp.c(1037):[client 192.168.97.8] [CMP]
cu_octet_str_set: ending ok …

答案:

awk '$4>"13:00:00"&&$4<="16:59:00"' ca_access.log

13. 编写脚本使用ping命令检测一组IP地址判断是否处于活跃状态。 要求(range:192.168.1.200-192.168.1.220,一个IP发送4个ping包,ping的过程不能输出信息到终 端)?

答案:

#!/bin/bash
for i in {200..220}
do
ping -c 4 -i 0.2 -W 1 192.168.1.$i &>/dev/null
if [ $? -ne 0 ];then
echo "192.168.1.$i is down"
fi
done

14.如何查看httpd访问日志文件access.log中哪个IP访问最多?

答案:

awk '{ip[$1]++} END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log |
sort -nr

15. 说出 awk 打印/etc/passwd 最后两列的命令怎么写?sed里A 替换成B命令怎么写?

答案:

# awk ‘{print $NF,$(NF-1)}’ /etc/passwd
# sed ‘s/A/B/’ /etc/passwd

16.使用sed命令将下文data.txt第2至4行中包含dog字符替换成cat

the lazy dog
the lazy dog
the lazy dog
the lazy fish
the hot dog

答案:

# sed -i '2,4s/dog/cat/' data.txt

17.如何删除文本中的空格?

答案:

# sed -i 's/ //g' 文件名
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Shell
Shell编程(下)
Shell编程(下)
96 1
|
2月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
42 1
|
2月前
|
Shell Linux 开发工具
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
72 12
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
46 12
|
3月前
|
Shell Linux
Shell 编程 编写hello word
Shell 编写hello word
54 5