Shell编程

简介: 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日志并进行多维度分析。
相关文章
|
14天前
|
Unix Linux Shell
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
61 0
|
14天前
|
Shell C++ 开发者
【Shell 编程指南】Shell运算操作符之$[]详解
【Shell 编程指南】Shell运算操作符之$[]详解
24 0
|
14天前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
78 0
|
14天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
14天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
|
14天前
|
存储 网络协议 Shell
第十章 Shell编程时常用的系统文件
第十章 Shell编程时常用的系统文件
|
14天前
|
Shell
Shell脚本编程基础
Shell脚本编程基础
|
14天前
|
存储 Java Shell
bigdata-04-shell编程基础
bigdata-04-shell编程基础
26 0
|
14天前
|
Shell Linux C++
【Shell 编程设计】 编写自己的清理后台的Shell脚本
【Shell 编程设计】 编写自己的清理后台的Shell脚本
38 1
|
14天前
|
存储 Shell 数据安全/隐私保护
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
76 0