Shell
Linux 的启动过程
- BIOS-MBR-BootLoader(grub)-kernel-systemd-系统初始化-shell
- BIOS BIOS引导,基本输入输出系统,在主板上,引导硬盘或光盘
- MBR 硬盘主引导
- BootLoader 启动和引导内核的工具,选择哪一个内核以及版本
- kernel 内核,驱动硬件,然后初始化环境
- systemd 1号进程,加载内核模块
- 查看硬主引导记录
- dd if=/dev/sda of=mbr/bin bs=446 count=1
- hexdump -C mbr.bin 以十六进制方式查看,记录中有 55 aa 这个标记,说明硬盘是可引导的
shell 脚本的执行方式
管道与重定向
-
管道与管道符
- 管道也是进程通信的方式之一
- 管道符 “|”,将前一个命令执行的结果传递给后面的命令
- ps | cat
- echo 123 | ps
- 管道符两边若是外部命令,则会建立子进程。若是使用内部命令,建议将命令封装在脚本之内再去执行。若无必要,避免在管道符内使用内部命令。
-
子进程与子shell
-
重定向符号
- 一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
- 输入重定向符号 "<"
- read var < /path/to/a/file
- 输出重定向符号
- ">" 清空文件后再进行输入
- ">>" 文件保持不变,在末尾追加输入
- “2>” 将错误的信息进行输出到指定文件
- “&>” 无论正确或错误的信息,都输出到指定文件
- 例:echo 123 > /path/a/file
- 输入和输出重定向组合使用
- cat > /path/a/file << EOF
- I am #USER
- EOF
变量
数组
- 定义数组
- 显示数组所有元素
- 显示数组元素个数
- 显示数组的第一个元素
转义与引用
- 特殊字符
- "#" 注释, ";"分号,""转义符号,"""和"‘" 双引号和单引号
- " ‘ ` 双引号,单引号和反引号的区别。双引号不完全引用,包含变量的话会进行解释,单引号完全引用,包含变量的话不会进行解释。反引号用于执行命令。
- 由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释
- 由双引号括起来的字符,除 $、反引号 (`) 和反斜线 (\) 仍保留其特殊功能外,其余字符均作为普通字符对待。“$”表示变量替换;反引号表示命令替换;
- 反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分
算数运算
- expr 4+5 expr 只支持整数
- num=`expr 4+5`
- (( a=4+5 )) ; echo $a,双圆括号相当于 let 命令
特殊符号
- (),单独使用圆括号,会产生一个子进程。( abc=123 );echo $abc 时不会显示。
- [] 用于测试,相当于 test 命令,测试两个字符,判断文件类型以及对数字大小作比较。
如[ 5 -gt 4 ];echo $?
- [[]] 双中括号用于表达式,如 [[ 5 > 4 ]];echo $?
- {},用于规定范围,如 echo {0..9}
退出与退出命令
- 退出程序命令
- exit
- exit 10 返回10给shell,返回值非0位不正常退出
- $? 判断当前shell前一个进程是否正常退出
- test 命令用于检查文件或者比较值
Linux学习-Shell
原文:https://www.cnblogs.com/chenri/p/12649967.html