shell流程控制for循环经典面试题

编写一个shell脚本,判断当前网络(假设为192.168.150.0/24)里,查看当前在线用户IP有哪些。

#! /bin/bash
  
for ((i=1;i<=254;i++))
do
        if ping -c 2 -w 1 192.168.150.$i &>/dev/null
        then
                echo "192.168.150.$i is pong!"
        else
                echo "192.168.150.$i is not pong!"
        fi
done
结果:
[root@bogon ~]# vim for9.sh
[root@bogon ~]# chmod +x for9.sh 
[root@bogon ~]# ./for9.sh 
192.168.150.1 is pong!
192.168.150.2 is pong!
192.168.150.3 is pong!
192.168.150.4 is pong!
192.168.150.5 is pong!
192.168.150.6 is pong!
192.168.150.7 is pong!
192.168.150.8 is pong!
192.168.150.9 is pong!
192.168.150.10 is pong!
192.168.150.11 is not pong!
192.168.150.12 is not pong!
192.168.150.13 is not pong!
192.168.150.14 is not pong!
192.168.150.15 is not pong!
192.168.150.16 is not pong!
192.168.150.17 is not pong!
192.168.150.18 is not pong!
192.168.150.19 is not pong!
192.168.150.20 is not pong!
192.168.150.21 is not pong!
192.168.150.22 is not pong!
192.168.150.23 is not pong!
192.168.150.24 is not pong!
192.168.150.25 is not pong!
192.168.150.26 is not pong!
192.168.150.27 is not pong!
192.168.150.28 is not pong!
192.168.150.29 is not pong!
192.168.150.30 is not pong!
192.168.150.31 is not pong!
192.168.150.32 is not pong!
192.168.150.33 is not pong!
192.168.150.34 is not pong!
192.168.150.35 is not pong!
192.168.150.36 is not pong!
192.168.150.37 is not pong!
192.168.150.38 is not pong!
192.168.150.39 is not pong!
192.168.150.40 is not pong!
192.168.150.41 is not pong!
192.168.150.42 is not pong!
192.168.150.43 is not pong!
192.168.150.44 is not pong!
192.168.150.45 is not pong!
192.168.150.46 is not pong!
192.168.150.47 is not pong!
192.168.150.48 is not pong!
192.168.150.49 is not pong!
192.168.150.50 is not pong!
192.168.150.51 is not pong!
192.168.150.52 is not pong!
192.168.150.53 is not pong!
192.168.150.54 is not pong!
192.168.150.55 is not pong!
192.168.150.56 is not pong!
192.168.150.57 is not pong!
192.168.150.58 is not pong!
192.168.150.59 is not pong!
192.168.150.60 is not pong!
192.168.150.61 is not pong!
192.168.150.62 is not pong!
192.168.150.63 is not pong!
192.168.150.64 is not pong!
192.168.150.65 is not pong!
192.168.150.66 is not pong!
192.168.150.67 is not pong!
192.168.150.68 is not pong!
192.168.150.69 is not pong!
192.168.150.70 is not pong!
192.168.150.71 is not pong!
192.168.150.72 is not pong!
192.168.150.73 is not pong!
192.168.150.74 is not pong!
192.168.150.75 is not pong!
192.168.150.76 is not pong!
192.168.150.77 is not pong!
192.168.150.78 is not pong!
192.168.150.79 is not pong!
192.168.150.80 is not pong!
192.168.150.81 is not pong!
192.168.150.82 is not pong!
192.168.150.83 is not pong!
192.168.150.84 is not pong!
192.168.150.85 is not pong!
192.168.150.86 is not pong!
192.168.150.87 is not pong!
192.168.150.88 is not pong!
192.168.150.89 is not pong!
192.168.150.90 is not pong!
192.168.150.91 is not pong!
192.168.150.92 is not pong!
192.168.150.93 is not pong!
192.168.150.94 is not pong!
192.168.150.95 is not pong!
192.168.150.96 is not pong!
192.168.150.97 is not pong!
192.168.150.98 is not pong!
192.168.150.99 is not pong!
192.168.150.100 is not pong!
192.168.150.101 is not pong!
192.168.150.102 is not pong!
192.168.150.103 is not pong!
192.168.150.104 is not pong!
192.168.150.105 is not pong!
192.168.150.106 is not pong!
192.168.150.107 is not pong!
192.168.150.108 is not pong!
192.168.150.109 is not pong!
192.168.150.110 is not pong!
192.168.150.111 is not pong!
192.168.150.112 is not pong!
192.168.150.113 is not pong!
192.168.150.114 is not pong!
192.168.150.115 is not pong!
192.168.150.116 is not pong!
192.168.150.117 is not pong!
192.168.150.118 is not pong!
192.168.150.119 is not pong!
192.168.150.120 is not pong!
192.168.150.121 is not pong!
192.168.150.122 is not pong!
192.168.150.123 is not pong!
192.168.150.124 is not pong!
192.168.150.125 is not pong!
192.168.150.126 is not pong!
192.168.150.127 is not pong!
192.168.150.128 is not pong!
192.168.150.129 is not pong!
192.168.150.130 is not pong!
192.168.150.131 is not pong!
192.168.150.132 is not pong!
192.168.150.133 is not pong!
192.168.150.134 is not pong!
192.168.150.135 is not pong!
192.168.150.136 is not pong!
192.168.150.137 is not pong!
192.168.150.138 is not pong!
192.168.150.139 is not pong!
192.168.150.140 is not pong!
192.168.150.141 is not pong!
192.168.150.142 is not pong!
192.168.150.143 is not pong!
192.168.150.144 is not pong!
192.168.150.145 is not pong!
192.168.150.146 is not pong!
192.168.150.147 is not pong!
192.168.150.148 is not pong!
192.168.150.149 is not pong!
192.168.150.150 is not pong!
192.168.150.151 is not pong!
192.168.150.152 is not pong!
192.168.150.153 is not pong!
192.168.150.154 is not pong!
192.168.150.155 is not pong!
192.168.150.156 is not pong!
192.168.150.157 is not pong!
192.168.150.158 is not pong!
192.168.150.159 is not pong!
192.168.150.160 is not pong!
192.168.150.161 is not pong!
192.168.150.162 is not pong!
192.168.150.163 is not pong!
192.168.150.164 is not pong!
192.168.150.165 is not pong!
192.168.150.166 is not pong!
192.168.150.167 is not pong!
192.168.150.168 is not pong!
192.168.150.169 is not pong!
192.168.150.170 is not pong!
192.168.150.171 is not pong!
192.168.150.172 is not pong!
192.168.150.173 is not pong!
192.168.150.174 is not pong!
192.168.150.175 is not pong!
192.168.150.176 is not pong!
192.168.150.177 is not pong!
192.168.150.178 is not pong!
192.168.150.179 is not pong!
192.168.150.180 is not pong!
192.168.150.181 is not pong!
192.168.150.182 is not pong!
192.168.150.183 is not pong!
192.168.150.184 is not pong!
192.168.150.185 is not pong!
192.168.150.186 is not pong!
192.168.150.187 is not pong!
192.168.150.188 is not pong!
192.168.150.189 is not pong!
192.168.150.190 is not pong!
192.168.150.191 is not pong!
192.168.150.192 is not pong!
192.168.150.193 is not pong!
192.168.150.194 is not pong!
192.168.150.195 is not pong!
192.168.150.196 is not pong!
192.168.150.197 is not pong!
192.168.150.198 is not pong!
192.168.150.199 is not pong!
192.168.150.200 is not pong!
192.168.150.201 is not pong!
192.168.150.202 is not pong!
192.168.150.203 is not pong!
192.168.150.204 is not pong!
192.168.150.205 is not pong!
192.168.150.206 is not pong!
192.168.150.207 is not pong!
192.168.150.208 is not pong!
192.168.150.209 is not pong!
192.168.150.210 is not pong!
192.168.150.211 is not pong!
192.168.150.212 is not pong!
192.168.150.213 is not pong!
192.168.150.214 is not pong!
192.168.150.215 is not pong!
192.168.150.216 is not pong!
192.168.150.217 is not pong!
192.168.150.218 is not pong!
192.168.150.219 is not pong!
192.168.150.220 is not pong!
192.168.150.221 is not pong!
192.168.150.222 is not pong!
192.168.150.223 is not pong!
192.168.150.224 is not pong!
192.168.150.225 is not pong!
192.168.150.226 is not pong!
192.168.150.227 is not pong!
192.168.150.228 is not pong!
192.168.150.229 is not pong!
192.168.150.230 is not pong!
192.168.150.231 is not pong!
192.168.150.232 is not pong!
192.168.150.233 is not pong!
192.168.150.234 is not pong!
192.168.150.235 is not pong!
192.168.150.236 is not pong!
192.168.150.237 is not pong!
192.168.150.238 is not pong!
192.168.150.239 is not pong!
192.168.150.240 is not pong!
192.168.150.241 is not pong!
192.168.150.242 is not pong!
192.168.150.243 is not pong!
192.168.150.244 is not pong!
192.168.150.245 is not pong!
192.168.150.246 is not pong!
192.168.150.247 is not pong!
192.168.150.248 is not pong!
192.168.150.249 is not pong!
192.168.150.250 is not pong!
192.168.150.251 is not pong!
192.168.150.252 is not pong!
192.168.150.253 is not pong!
192.168.150.254 is not pong!

<think>好的,用户让我介绍一下“Shell面试宝典”。我需要先明确用户的需求。可能他们正在准备Shell相关的面试,需要一份指南或常见问题列表。首先,我应该考虑Shell面试通常涵盖哪些内容,比如基本命令、脚本编写、调试、文本处理工具等。 接下来,用户可能希望了解宝典的结构,比如是否包含常见问题、示例答案或者实战练习题。他们可能还关心如何高效准备,比如重点复习哪些命令,如何处理常见错误,或者如何展示脚本编写能力。 另外,用户可能对Shell的不同版本有疑问,比如Bash和Zsh的区别,但可能更常见的是Bash,所以需要侧重Bash的内容。还要考虑不同公司的需求,有的可能偏重自动化运维,有的可能关注数据处理能力,所以宝典需要涵盖广泛的主题。 还要注意用户可能遇到的问题类型,比如基础概念题、脚本编写题、调试题等。每个类别举几个例子会帮助用户理解。比如变量赋值、条件判断、循环结构、正则表达式使用等。 另外,用户可能想知道如何展示高级技能,比如进程管理、信号处理、性能优化等。这些内容可以提升他们的竞争力。此外,常见的工具如grep、sed、awk的使用也是重点,需要详细说明。 最后,要提醒用户实践的重要性,建议他们通过编写脚本和解决问题来巩固知识。可能还需要推荐一些资源,比如在线练习平台或经典书籍,但用户没有明确要求,所以可能不需要展开,除非必要。 总结一下,回答需要结构清晰,分点介绍Shell面试的主要知识点,常见问题示例,以及准备建议,确保用户能系统性地准备面试。</think>以下是一份结构化整理的Shell面试核心知识点及准备指南,适用于Linux运维、开发等岗位的面试准备: $$ \text{Shell面试知识体系} = \text{基础命令} + \text{脚本编程} + \text{工具链} + \text{实战场景} $$ ### 一、核心语法考察点 1. **变量操作** - 定义与引用:`$var` vs `${var}` - 特殊变量:`$$`(PID)、`$?`(退出码)、`$#`(参数个数) - 示例考题: ```bash str="hello" && echo ${str^^} # 输出什么? ``` 2. **流程控制** - 条件判断:`[ ]` vs `[[ ]]`,数值/字符串比较 - 循环结构:`for ((i=0;i<10;i++))` vs `for i in {1..10}` - 示例考题: ```bash while read line; do [[ $line == #* ]] || echo $line; done < file ``` ### 二、文本处理三剑客 $$ \text{处理能力} = \text{grep过滤} \times \text{sed转换} + \text{awk分析} $$ 1. **grep进阶** - 正则匹配:`-E`扩展正则、`-o`只输出匹配部分 - 上下文控制:`-A 2`(后2行)、`-B 1`(前1行) 2. **sed实战** - 模式空间与保持空间 - 地址定界:`/pattern1/,/pattern2/`区间处理 3. **awk编程** - 字段处理:`$NF`末列、`FS`分隔符 - 统计计算: ```bash awk '{sum+=$3} END{print sum/NR}' data.txt ``` ### 三、高频脚本考题 1. **日志分析** ```bash # 统计Nginx日志中状态码分布 awk '{code[$9]++} END{for(c in code) print c,code[c]}' access.log ``` 2. **文件批量处理** ```bash # 重命名所有.jpg文件为前缀+序号 cnt=1; for f in *.jpg; do mv "$f" "photo_${cnt}.jpg"; ((cnt++)); done ``` ### 四、调试与优化 1. **调试技巧** - `set -x` 开启调试模式 - `trap 'echo ERROR:$LINENO' ERR` 错误捕获 2. **性能优化** - 减少子进程创建(尽量使用内置命令) - 避免频繁读写(合并IO操作) ### 五、面试准备建议 1. **知识图谱构建** - 基础语法 → 工具链 → 系统原理(如管道实现机制) 2. **实战演练** - 刷题平台:LeetCode Shell题库、HackerRank - 典型场景:日志分析、数据清洗、自动化部署 3. **深度问题准备** - Shell与Python的适用场景对比 - 如何实现进程间通信(命名管道、信号量) 建议通过以下命令测试基础能力: ```bash # 检测文本中重复出现的IP地址 awk '{ip[$1]++} END{for(i in ip) if(ip[i]>10) print i}' access.log | sort -nr ``` 注:实际面试中需重点展示解决问题的完整思考过程,即使不能立即写出完美代码,清晰的逻辑分析同样重要。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值