4.5 UNIX Shell:程序员与计算机的"塑料友情"
各位程序员朋友们,你们是否经常遇到这样的场景:面对黑漆漆的命令行窗口,手指悬在键盘上方,大脑一片空白,就像猫见了黄瓜——完全不知所措?别担心,今天我们就来揭开 UNIX Shell 这个"神秘面纱",让你从"命令行恐惧症"患者变成"终端操控大师"!
UNIX Shell,这个听起来高大上的名词,其实就是你和计算机之间的"翻译官"。它就像是你和操作系统之间的"塑料姐妹花"——表面上亲密无间,背地里却经常闹别扭(尤其是当你输错命令的时候)。但别小看这个"翻译官",它可是 UNIX 世界的"扛把子",掌握着系统生杀大权。
Shell 的"前世今生"
让我们先来点历史课,不过别担心,不会像大学课堂那样让你昏昏欲睡:
-
Bourne shell (sh):1979年由 Stephen Bourne 开发,相当于 Shell 界的"老古董"。它就像你爷爷那台老式收音机——功能单一但可靠,适合系统管理自动化,但交互功能?不存在的!
-
C shell (csh):70年代末由伯克利的大佬们开发,就像给老收音机加了个蓝牙功能。它注重交互体验,但脚本执行速度嘛...就像用蓝牙传输大文件——慢得让人想砸电脑。
-
Korn shell (ksh):1986年 AT&T 的 David Korn 出品,相当于给老收音机加上了智能语音助手。它集成了 Bourne shell 的优点,又加入了 C shell 的一些酷炫功能。
-
Bash (Bourne Again shell):1988年 Brian Fox 推出,Linux 系统的默认 Shell。它就像瑞士军刀——功能多到让你怀疑人生,兼容性也好到离谱。
-
TC shell (tcsh):C shell 的"豪华升级版",就像给蓝牙收音机又加了个触屏。
4.5.1 常见考点汇总:Shell 的"七宗罪"
想要征服 Shell,你得先了解它的"七宗最":
-
Shell 的定义与功能:它就是个"传话筒",但千万别小看它,惹毛了它分分钟让你的系统"原地爆炸"。
-
Shell 内置命令:这些是 Shell 自带的"独门绝技",就像你手机里的预装应用——有的实用,有的鸡肋。
-
Shell 编程的位置参量: 、 1、$2...这不是在玩数字游戏,而是脚本编程的"通关密码"。
-
Shell 的命令行参数:-a、-b、-c...字母表都快被用完了,每个字母背后都可能藏着惊天秘密。
-
标准 I/O 和重定向:这是 Shell 的"乾坤大挪移",能把输入输出玩出花来。
-
正则表达式与模式匹配:程序员界的"摩斯密码",学好了能让你少写一半代码。
-
文本处理三剑客:
- grep
文本界的"搜狗",找东西比你的前女友翻你手机还快。
- sed
流编辑器中的"闪电侠",处理文本快到让你怀疑人生。
- awk
数据处理界的"瑞士军刀",功能强大到让人想哭。
- grep
4.5.2 经典考题及解析:Shell 面试"求生指南"
面试试题1:grep 的"捉迷藏"游戏
题目:使用 grep 命令在 Linux 系统中实现下列查找:
-
显示所有包括 tom 或 Tom 的行(大小写不敏感)
-
显示所有不包括 lily 的行
-
显示所有以 M 开头、以 t 结尾的行
-
显示所有包含以大写字母开头,后跟 3 个小写字母的单词的行
解答:
# 1. 找 Tom 或 tom,-i 表示"我不管大小写"
grep-i'tom' datafile
# 2. 排除所有 lily,-v 表示"眼不见为净"
grep-v'lily' datafile
# 3. 找 M...t 的行,表示开头,$表示结尾
grep'M.*t$' datafile
# 4. 找如"John"这样的单词,[A-Z]表示大写字母,[a-z]{3}表示3个小写字母
grep'\<[A-Z][a-z]\{3\}\>' datafile
面试试题2:I/O 重定向的"魔术戏法"
题目:请解释 bash shell 中标准 I/O 和重定向,exec 命令和重定向。
解答:
Shell 启动时继承了三个"神秘通道":
- stdin
(标准输入):通常是键盘,就像你的嘴巴
- stdout
(标准输出):通常是屏幕,就像你的脸
- stderr
(标准错误):通常也是屏幕,就像你做错事时的表情
重定向操作符:
< 文件名
把文件喂给程序当输入
> 文件名
把程序输出存到文件(会覆盖原文件,小心!)
>> 文件名
把程序输出追加到文件(不会覆盖,比较温柔)
2> 文件名
把错误信息存到文件(终于不用看红字了)
exec 命令: 这个命令就像"灵魂附体",能让当前程序"变身"成另一个程序。它还能不创建子 Shell 就改变输入输出,简直是个"变形金刚"。
# 用 ls 替换当前 shell(用完就"死")
execls
# 把 filea 作为标准输入
exec<filea
# 把输出重定向到 filex
exec>filex
面试试题3:Shell 脚本的"诞生记"
题目:谈谈对 shell 脚本的认识并说出如何创建 shell 脚本?
解答:
Shell 脚本就是一堆命令的"集合体",相当于给计算机的"购物清单"。创建步骤简单到哭:
- 第一行
写上
#!/bin/bash
,这叫 shebang,不是脏话! - 注释
用
#
开头,写给人类看的,计算机会自动忽略 - 命令
把你平时在命令行敲的东西写进去
- 给权限
用
chmod +x 脚本名
赋予执行权限,不然脚本就是个"废柴"
示例:
#!/bin/bash
# 这是一个超级简单的脚本
echo"Hello World!"# 打印经典语句
ls-l# 列出文件
面试试题4:元字符的"秘密语言"
题目:请解释 shell 中元字符的含义,如 *
, ?
, (cmds)
等。
解答:
元字符是 Shell 的"摩斯密码",掌握它们你就能和 Shell"说悄悄话":
*
匹配任意数量字符(包括零个),就像"随便"
?
匹配单个字符,就像"一个字"
[abc]
匹配 a、b 或 c,就像"三选一"
[!abc]
匹配除了 a、b、c 的字符,就像"除了这三个都行"
(cmds)
在子 Shell 中执行命令,就像"开小灶"
{cmds}
在当前 Shell 中执行命令,就像"大锅饭"
面试试题5:Sed 的"文字魔术"
题目:谈谈对 Shell 流编辑器 Sed 的认识并对 Sed 常用命令简单进行介绍。
解答:
Sed 是文本处理的"闪电侠",它处理文本的速度比你女朋友变脸还快。常用命令:
s/old/new/
替换文本,就像"整容手术"
d
删除行,就像"人间蒸发"
p
打印行,就像"大声朗读"
a\text
在行后追加文本,就像"补充说明"
i\text
在行前插入文本,就像"开场白"
示例:
# 把所有的"love"换成"hate"
sed's/love/hate/g' file.txt
# 删除所有空行
sed'/^$/d' file.txt
结语:Shell 学习的"终极奥义"
学习 Shell 就像学习一门新语言,刚开始你可能会觉得:
rm -rf /
看起来人畜无害
chmod 777
像某种神秘代码
-
管道符
|
就是个竖线而已
但请记住,Shell 是个"记仇"的家伙,你犯的每个错误它都会"秋后算账"。所以:
- 备份!备份!备份!
重要的事情说三遍
-
慎用
rm -rf
,除非你想体验"从零开始" -
多使用
man
命令,它比百度靠谱 -
练习、练习、再练习,直到手指抽筋
最后送大家一句 Shell 界的"至理名言":"With great power comes great responsibility."(能力越大,删库风险越大)祝大家在 Shell 的世界里玩得开心,别把服务器玩崩了!