shell就是一个bash程序
- 解释器,启动器
- 解释器:
用户交互输入
文本文件输入
脚本本质:
- #!/bin/bash
- #!/usr/bin/python
读取方式:
- 当前shell:source .
- 新建子shell:/bin/bash file 或者 ./file.sh (需要chmod+x file.sh)
重定向不是命令
- 程序自身都有I/O
0:标准输入
1:标准输出
2:错误输出
- 控制程序I/O位置
- 一切皆文件
/proc/$$/fd
- 程序是否处理I/O
- 重定向绑定顺序:从左到右
ls / /hello 1> mylog1.log 2>&1
ls / /hello >& mylog2.log
ls / /hello &> mylog2.log
read aaa 0<<<"hello"
read aaa 0<<MYEOF
cat 0< /etc/passwd
exec:使用指定的命令替换当前shell命令
bash变量
- name=bjsxt
局部变量
- 只能用于函数
- local var=100
位置变量
- $1,$2,${11}
特殊变量
- $#:位置参数个数
- $*:参数列表,双引号引用为一个字符串 ./a a b c d e "a b c d e"
所有的参数作为一个字符串 5个参数作为一个字符串
- $@:参数列表,双引号引用为单独的字符串 "a" "b" "c" "d" "e"
所有的参数作为单个的字符串 5个参数作为五个字符串
- $$:当前shell的PID:接收者
$BASHPID:真实的值
管道
- $?:上一个命令的退出状态
0:成功
其他:失败