学习Shell编程
目录
1 什么是Shell
2 Linux的启动过程
3 怎样编写一个Shell脚本
4 Shell脚本的执行方式
5 内建命令和外部命令的区别
6 管道和重定向
7 变量赋值
8 环境变量配置文件
1 什么是Shell
Shell是命令解释器,用于解释用户对操作系统的操作
2 Linux的启动过程
BIOS-MBR-BootLoader(grub)-kernel-systemd-系统初始化-Shell
3 怎样编写一个Shell脚本
-
UNIX的哲学:一条命令只做一件事
-
为了组合命令和多次执行,使用脚本文件来保存需要执行的命令
-
赋予该文件执行权限(chmod u+rx filename)
#!/bin/bash # demo 2 cd /tmp pwd
![](https://pic4.zhimg.com/v2-d0ded2d9581c140fa150fed7bc2aaa6b_b.png)
执行2.sh,输出/tmp的路径
4 Shell脚本的执行方式
执行命令共四种
![](https://pic2.zhimg.com/v2-9704a58451e9ee98ffc567bbe8d4b2d1_b.png)
![](https://pic3.zhimg.com/v2-f14715405b36a3286c3eaa413e4d99e2_b.png)
![](https://pic1.zhimg.com/v2-42a415b35e8930a9aebcf8add2544578_b.png)
![](https://pic2.zhimg.com/v2-8341761fd9488fb4dc63d65de9a77981_b.png)
这两种方式,Shell脚本不会产生新的子进程,脚本执行过程中,直接在父进程中进行操作。所以当前目录发生变化。
5 内建命令和外部命令的区别
内建命令不需要创建子进程
内建命令对当前Shell生效
6 管道和重定向
管道与管道符
-
管道和信号一样,也是进程通信的方式之一
-
匿名管道(管道符)是Shell编程经常用到的通信工具
-
管道符是“|”,将前一个命令执行的结果传递给后面的命令
ps | cat echo 123 | ps
![](https://pic1.zhimg.com/v2-43f5cae622fe37f39d9a43e9f2fc9e6c_b.png)
![](https://pic4.zhimg.com/v2-185f0a5b59a234f5731af1a775c7d94b_b.png)
![](https://pic4.zhimg.com/v2-8ffec60164aaa17c568e94509d24c1d7_b.png)
![](https://pic2.zhimg.com/v2-6989376509cf294964f1c8976be0a9f5_b.png)
![](https://pic3.zhimg.com/v2-781ef83269fc978ff17af6a2ac22ccf6_b.png)
![](https://pic3.zhimg.com/v2-ae2289143407e5639615d9a2f85ffa42_b.png)
![](https://pic1.zhimg.com/v2-a4b59d5e2b78a357bb3f545335c5c80c_b.png)
![](https://pic3.zhimg.com/v2-2e7a6dbaac7b32d0e9c0e41d99477872_b.png)
在3.sh中新建/home/zopen/test/a.sh,并把echo "hello bash."写入a.sh中
![](https://pic3.zhimg.com/v2-93096e8bb57d55a70fe8b056f68aacaa_b.png)
7 变量赋值
变量的定义
-
${变量名}称作对变量的引用
-
echo ${变量名}查看变量的值
-
${变量名}在部分情况下可以省略为 $变量名
![](https://pic3.zhimg.com/v2-5ad49050e511d004efcfd62eab0a6c5e_b.png)
-
变量的默认作用范围
-
变量的导出 export
-
变量的删除 unset
![](https://pic2.zhimg.com/v2-2fddf396d780ae2d138cb7b2b21764b5_b.png)
如果想删除变量,则使用:unset 变量名
8 环境变量配置文件
配置文件
-
/etc/profile
-
/etc/profile.d/
-
~/.bash_profile
-
~/.bashrc
-
/etc/bashrc
非etc的是特定用户使用的环境变量。