Linux脚本练习之script092- 判断输入的是否为IP地址

script092

题目

注:题目来源于 SHELL16 判断输入的是否为IP地址

写一个脚本统计文件nowcoder.txt中的每一行是否是正确的IP地址。

  • 如果是正确的IP地址输出:yes
  • 如果是错误的IP地址,四段号码的话输出:no,否则的话输出:error

假设 nowcoder.txt 内容如下:

192.168.1.1
192.168.1.0
300.0.0.0
123

你的脚本应该输出:

yes
yes
no
error

脚本一

循环读取文件中的每一行,通过 awk 命令编程来判断 IP 地址是否正确。首先 -F "." 表示按照点号进行分割,NFawk 命令的内置变量,表示分割后字段域的个数,如果不足四个,则应该输出 "error" 表示错误的。如果字段域的个数是四个,则需要判断每个字段的值是否在 [0, 255] 范围内,如果四个字段的值都在这个范围内则表示是正确的 IP 地址则输出 "yes";只要有一个字段的值不在这个范围内则表示是错误的 IP 地址则输出 "no"

#!/bin/bash

# 循环读取文件每一行
while read line; do
  # 用点号分割每一行的内容
  echo "${line}" | awk -F "." '{
  # 如果切割后的字段域个数不是四个则输出 "error"
  if(NF!=4){
    print "error"
  }
  # 如果字段域的个数是四个,则判断 IP 地址是否正确
  else{
  	# 循环每一个字段
    for(i=1;i<=NF;i++){
      # 判断该字段的范围是否在 [0, 255] 范围内,如果是则进行计数
      if($i>=0&&$i<=255){
        count++
      }
    }
    # 最后判断计数变量 count 是否等于 4,如果是则表示该 IP 地址是正确的,否则不正确
    if(count==4){
      print "yes"
    } else{
      print "no"
    }
  }
}'
done < nowcoder.txt  
### 关于 Linux 三剑客 (grep, awk, sed) 的练习资料与教程 #### 使用 `grep` 进行模式匹配和过滤 `grep` 是一种强大的文本搜索工具,能够利用正则表达式来筛选文件中的特定行。例如,在 `/etc/passwd` 文件中查找包含字符串 `"root"` 的所有行: ```bash grep "root" /etc/passwd ``` 也可以通过管道符传递输入给 `grep` 来实现相同的效果[^3]。 #### 利用 `awk` 处理结构化数据 `awk` 主要用于解析并处理具有固定列宽或由分隔符分割的数据记录。下面是一个简单的例子,它会读取每一行并将第二字段打印出来: ```bash echo 'apple orange banana' | awk '{print $2}' ``` 此命令将输出单词 `orange`,因为这是该行的第二个词。 #### 应用 `sed` 执行流编辑功能 `sed` 可以用来执行各种基于脚本的操作,比如替换、删除以及插入文本。这里有一个实例展示了如何把所有的大写字母转换成小写形式: ```bash echo 'HELLO WORLD!' | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' ``` 这将会返回全部字母都变成小写的版本——即 `hello world!`。 为了更好地掌握这三个实用程序的功能及其组合使用的技巧,建议读者尝试完成如下几个练习题目: 1. **基础篇** - 编写一条指令找出当前目录下所有 `.txt` 后缀名文件里含有关键词 `"error"` 的行; - 将上述结果进一步限定只显示不含关键字 `"warning"` 的部分; 2. **中级篇** - 创建一个名为 `data.csv` 的 CSV 文件,其中每行为三个逗号分隔开的名字(如 John,Doe,Smith),编写一段 shell script 提取出第三列为 Smith 的那些条目; - 对上一步得到的结果按照第一个名字首字母顺序排列,并统计各姓氏出现次数; 3. **高级篇** - 设计一组复杂的正则表达式规则集,可以从 HTML 文档源码提取出超链接地址 `<a href="...">...</a>` 中的内容; - 结合之前学到的知识点,构建完整的 web 日志分析 pipeline 流程图,包括但不限于 IP 地址抽取、访问时间戳整理等功能模块的设计思路说明文档撰写等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值