目录
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)
文件名:2.sh
#!/bin/bash
# demo 2
cd /tmp
pwd
4 Shell脚本的执行方式
执行命令共四种
(1) bash ./filename.sh
(2)./filename.sh
这两种方式,Shell脚本产生一个新的bash子进程,脚本执行过程中,是子进程切换到新的目录,当子进程执行完毕后,回到父进程,当前目录不会发生变化。
执行命令
(3)source ./filename.sh
(4). filename.sh
这两种方式,Shell脚本不会产生新的子进程,脚本执行过程中,直接在父进程中进行操作。所以当前目录发生变化。
5 内建命令和外部命令的区别
内建命令不需要创建子进程
内建命令对当前Shell生效
6 管道和重定向
管道与管道符
- 管道和信号一样,也是进程通信的方式之一
- 匿名管道(管道符)是Shell编程经常用到的通信工具
- 管道符是“|”,将前一个命令执行的结果传递给后面的命令
ps | cat
echo 123 | ps
重定向符号
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
输入重定向符号“<”
read var < /path/to/a/file
输出重定向符号“>”“>>”“2>”“&>”
echo $var_2 > a.txt
把变量var_2的值输出到a.txt,会覆盖a.txt原有内容。
echo $var_3 >> a.txt
把变量var_3的值追加到a.txt,不会覆盖a.txt原有内容。
如果希望把错误信息保存到文件,可以使用“2>”“&>”
nocmd 2> b.txt
把错误信息保存到b.txt中,查看b.txt文件,即显示错误信息。
nocmd &> c.txt
把所有的输出结果(正确和错误)都保存下来。
输入和输出重定向组合使用
在3.sh中新建/home/zopen/test/a.sh,并把echo "hello bash."写入a.sh中
7 变量赋值
变量的定义
变量名的命名规则
(1)字母、数字、下划线
(2)不以数字开头
变量的赋值
为变量赋值的过程,称为变量替换
变量名=变量值,比如:a=123
使用let为变量赋值,比如:let a=10+20
将命令赋值给变量,比如:l=ls
将命令结果赋值给变量,使用$()或者'',比如:letc=$(ls -l /etc)
变量值有空格等特殊字符可以包含在""或''中
变量的引用
- ${变量名}称作对变量的引用
- echo ${变量名}查看变量的值
- ${变量名}在部分情况下可以省略为 $变量名
变量的作用范围
- 变量的默认作用范围
- 变量的导出 export
- 变量的删除 unset
export可以把变量从子Shell传递给父Shell
如果想删除变量,则使用:unset 变量名
8 环境变量配置文件
配置文件
- /etc/profile
- /etc/profile.d/
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
带etc的是系统层次,所有用户共同使用的环境变量。
非etc的是特定用户使用的环境变量。