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表示在|管道序列中,只要有程序失败,整个脚本也会尽早退出