第四章 Shell篇
Shell脚本
这是Shell脚本的语法知识。
认识shell
什么是shell
Shell 是命令解释器,用于解释用户对操作系统的操作。
cat /etc/shells //查看shell类型
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
Linux启动过程
BIOS - MBR - BootLoader(grub) - kernel - init或systemd - 系统初始化 - shell
shell脚本
UNIX 的哲学:一条命令只做一件事
demo.sh
#!/bin/bash
# demo 注释
cd /data/
ls
pwd
#!
是一个约定的标记(Sha-Bang),它告诉系统这个脚本需要什么解释器来执行。
chmod u+rx demo.sh //赋权
//子进程执行,不会改变当前环境
bash demo.sh //可不需可执行权限
./demo.sh //必须可执行权限
//当前进程执行,会改变当前环境
source ./demo.sh
. filename.sh
- 内建命令不需要创建子进程
- 内建命令对当前 Shell 生效
管道与重定向
管道
匿名管道(管道符)|
是 Shell 编程经常用到的通信工具,将前一个命令执行的结果传递给后面的命令。
例如:
ls -l | more
more filename
cat filename | more //分页显示文件内容
管道符会将两侧命令(外建命令)建两个子进程,如果是内建命令,子进程的修改,不会传递到父进程。
外部命令会产生子进程,管道符同样会产生子进程。内部命令在shell当前进程运行,不会产生子进程。
在管道符两端放置内部命令,相当于打开了新的子shell。内部命令执行结束之后,子shell也会跟着一起结束。因此在管道符两端放置内部命令,对当前的shell是不生效的。
重定向
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符。
默认的标准输入是键盘,默认的标准输出是屏幕,默认的错误输出是屏幕,而改变这个行为就是重定向。
- < 输入重定向
- > 输出重定向
- >> 追加重定向
- 2> 错误重定向
- &> 全部重定向
- | 管道重定向
- &1 引用重定向
由于引用重定向“&1”的存在,会使得下面几个命令等价:
command > file 2> file(要打开两次file,效率较低)
command 2> file > file(要打开两次file,效率较低)
command > file 2> &1(只打开一次file,效率较高)
command 2> file > &1(只打开一次file,效率较高)
command &> file (只打开一次file,效率最高)
变量
变量定义
变量名的命名规则
- 字母、数字、下划线
- 不以数字开头
变量操作
赋值
a=123 //等号左右侧不能有空格,有空格会被认为是命令
let a=10+20 //let赋值,可计算
l