shell 命令解释器是用来解释用户对系统的操作 使用 cat /etc/shells 可以查看 系统安装的 shell
Linux 启动过程: BIOS -> MBR -> BootLoader(grub) -> kernel -> systemd -> 系统初始化 -> shell
BIOS 基本输入输出系统 选择 U 盘启动还是硬盘启动; MBR 硬盘里可引导的部分; BootLoader(grub) 启动内核工具 选择启动的内核;
kernel 启动内核; systemd 1 号进程 其余所有进程派生于它; 然后才是系统初始化 启动 shell
执行脚本的四种方式
- 1 bash ./filename.sh 2 ./filename.sh
- 3souce ./filename.sh 4 . ./filename.sh
1 和 2 执行脚本时 会创建一个新的进程来执行 3 和 4 执行脚本时会用当前进程来执行(环境变量是当前系统的环境变量) (不产生新进程执行的命令叫做内建命令
1 3 4 执行脚本时脚本可以不拥有执行权限 2 执行脚本时必须有可执行权限
管道'|' 两个进程之间的通信 第一个进程的输出当作第二个进程的输入 a|b|c a 的输出当作 b 的输入 b 的输出当作 c 的输入 (管道应该规避内建命令
重定向 更改标准输入和标准输出为文件 利用文件代替键盘的输入 保存至文件代替终端的输出
<输入 wc -l </etc/passwd 将<右侧的内容代替键盘输入
> 输出 覆盖输出 >> 追加输出
2>> 错误输出重定向 2 为标准错误流重定向
&>> 正确或错误都重定向输出
变量 shell 脚本中可以有变量 变量名由字母 数字 下划线组成 数字不能在变量名开始处
shell 变量为弱类型 不区分类型 区分大小写
使用方式 1name=value 等号左右不能有空格 2 read name 从用户处读入变量 交互式输入 3 name=ls 变量的值还可以是命令
4 name=$(ls /etc/)变量的值还可以是命令的字符串 $() 可以用 `` 反引号代替 5let a=2let 关键字也可赋值
6 变量的值有特殊字符时应该用 "或者'包起来 这时候不应该使用 let 使用'单引号包裹的内容不会解析变量 会被当作字符串输出
变量引用 ${}大括号 {} 可以省略 当使用字符串拼接时 也就是要把变量的值加上其他字符串 这时候 {} 不能省略
变量作用范围 默认作用于当前执行的 shell 本身 若想让作用于子 shell 时 需要用 export 导出一个变量 变量不再使用时 可以用 unset 删除变量
环境变量 环境变量是当前用户统一配置的 当前用户下每个 shell 都可以得到的变量 使用 env set 可以查看当前环境变量
常用环境变量 $PATH 为命令搜索路径 $USER 用户名 $UID 用户 id $PSI 配置终端提示显示
预定义变量 $? 保存上一条命令运行结果 0 为正确 1 为错误 $$ 当前进程 PID $0 当前进程名
位置变量 $0 $1 ... $9 执行脚本时的参数 不存在为空 (${2-_} 如果 $2 为空代表_ 不空代表 $2
环境变量配置文件 /etc/profile /etc/bashrc ~/.bashrc ~/.bash_bashrc /etc/profile.d/
/etc / 目录下对所有用户生效 ~/ 目录下对当前用户生效
执行 su - root 时 配置文件执行顺序 /etc/profile ~/.bash_bashrc ~/.bashrc /etc/bashrc 有相同变量名时后面会覆盖前面的
执行 su root 时 执行~/.bashrc 和 /etc/bashrc
数组的使用
IPTS=(1 2 3) 定义数组 值之间用空格分开 IPTS=(1 2 3)
echo ${IPTS[@]} 显示所有元素
echo ${#IPTS[@]}显示元素个数
echo ${IPTS[0]} 显示第 0 个元素
来源: https://www.cnblogs.com/kkcoolest/p/11741414.html