lecture1 封面
返回上一级

lecture1

2026.09.03
4
📂 missing semester

What is shell?

shell 是一个程序,运行在终端上

允许你运行程序、向程序传入输入,并以半结构化的方式查看输出。

Shell 让你能够 以富有创造性的方式组合不同的程序 ,为你的项目搭建持续集成以及在其他程序出错时进行排障。

常见shell

Linux 和 macOS:Bourne Again Shell (bash)

Windows:批处理(batch)或 PowerShell

尝试shell

~ 主目录的简写 提示符输入命令即可

echo 原样传递

echo hello world 是两个参数!!echo中通过空格分割参数

man --help 可以查看帮助

如果参数本身包含空格或特殊字符

  • 用 ' 或 " 把整个参数括起来,例如 "My Photos"
  • 只对需要的字符进行转义,用反斜杠 \,例如 My\ Photos

常用命令

cd(change directory,切换目录)。它实际上是 Shell 的内建命令,而不是独立程序

cd bin  // 注意不是/bin,是相对目录,直接进当前目录的bin
. 当前目录  ..上一级目录
cd bin/../bin/././../bin   相当于进bin

pwd(print working directory,打印当前工作目录)

查看 $PWD 环境变量(如 echo $PWD)

PATH:环境变量,名字对应字符串,依次检查文件夹

missing:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
missing:~$ which echo
/bin/echo
missing:~$ /bin/echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • cat hello.txt:打印 hello.txt 的全部内容
  • sort hello.txt:将 hello.txt 的各行按字典序排序后输出
  • uniq hello.txt:去除 hello.txt 中连续重复的行
  • head hello.txt 和 tail hello.txt:分别打印 hello.txt 的前几行和后几行
  • grep pattern hello.txt,它会在指定文本文件中查找所有匹配 pattern
  • 加上 -r 参数让 grep 递归搜索目录里的所有文本文件,输出匹配的行。
missing:~$ sed -i 's/pattern/replacement/g' hello.txt
  • -i 参数表示直接修改文件(inline),而不是只在终端输出替换后的内容
  • s/ 是 sed 语法里表示「替换」的意思
  • 两个 / 用来分隔「匹配模式」和「替换内容」
  • 结尾的 /g 表示在每一行中替换所有匹配项,而不仅仅是第一个
missing:~$ find ~/Downloads -type f -name "*.zip" -mtime +30

find命令很复杂 find默认递归 参数顺序会有影响

awk 解析文件,有独立的语言,处理有规则格式的数据文件(比如 CSV)
awk '{print $2}' data //在data中匹配每一行,打印每一行的第二列
awk -F,  //以,作为分隔符,相当于csv解析器
| 管道符 左输出做右输入 所有程序会并行运行,前输出,后立刻处理
>   < 左右输入输出
>> 会追加
sleep 10 是10s!!!
//在shell中写if逻辑
if [ "hello" = "world" ] ; then echo "true"  ; else echo "false" 
for i in $(seq 1 10); do

执行 seq 1 10(输出 1 到 10 的所有整数),然后用该命令的输出替换整个 $(),得到一个循环 10 次的 for 循环

#!/bin/bash
set -euo pipefail

解释器指示行: 当以 #!/path 开头的文件被执行时,Shell 会启动 /path 指向的程序

set 接受很多参数,简单说:

  • -e 表示任何命令失败时脚本立即退出
  • -u 表示使用未定义变量时直接报错,而不是默默当作空字符串
  • -o pipefail 表示在 | 管道序列中,只要有程序失败,整个脚本也会尽早退出