一、什么是 Shell?
狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工作。
系统合法的 shell 均写在 /etc/shells 文件中。
二、Bash Shell 的基本操作技巧
1、查看前一次登录执行过的命令:vim ~/.bash_history 2、命令和文件补全功能(Tab键) tab 接在一串指令的第一个字后面,则为命令补全 tab 接在一串指令的第二个字后面,则为文件补全 3、命令别名设定功能:alias alias lm='ls -al' 4、程序化脚本(shell scripts) 5、通配符
- && 前一个指令必须没有错误信息
- || 如果正确就不执行第二条。错误接着执行第二条

- 变量和变量内容以一个等号=连接,a=123
- 等号两边不能直接接空格符
- 由英文字母和数字组成,但开头不能是数字
- 变量内容中如果有特殊字符,可以用""或''将变量内容结合起来
- " "中 $变量,可以保留原本的特性
- ' ' 中$变量,当成一般字符来处理
- 可以用跳脱字符 \ 来使不认识的特殊字符来当成一般字符
- ``或者()的意义:``或者()里面的指令先被执行,作为外部的输入信息
- 将 - 变成 + 可以进行[取消]动作:declare +x sum :
- 单独列出变量的类型:declare -p sum
- 升级成环境变量:export PATH
- 取消变量 :unset a
- 数组定义:var[1]="123" var[2]="456" var[3]="789"
- ``或者()的意义:``或者()里面的指令先被执行,作为外部的输入信息
- 变量 $$:出现的数字就是你的PID号码
- 变量 ?:上一个错误指令的错误代码,如果没有错误就为0
变量交互:read -p "请输入你的名字:" -t 30 name (-p表示提示世界,-t 表示30秒的输入时间) 变量内容的扩展:PATH="$PATH":/home/bin 变量内容的删除:echo ${path#/*:} 这句话的意思是从/开始到:之间删除掉最短的字符

变量内容的替换:

执行: 1、直接绝对路径和相对路径执行,执行者必须要有脚本的执行权限。2、全局变量的话 可以通过 bash shell.sh 或 sh shell.sh来执行 source、 sh script 的执行方式差异? sh script 或者 bash script 都会使用一个新的bash环境来执行脚本中的命令,当子程序完成后,子程序完成后,在子程序内的各个变量或者动作将会结束而不会传回父程序中 source script 会在父程序中执行,因此各项动作都会在原本的bash 内生效 流程控制(顺序):shell scripts 依照 从上到下、从左到右 的顺序执行。 流程控制(条件):
- test -e file 文件名是否存在
- test -f file 文件名是否存在 且为file
- test -d directory 文件名是否存在且为目录
- test -r -w -x filename 是否具有可读可写可执行的权限
- test n1 -eq n2 两数值相等
- test n1 -ne n2 两数值不等
- -gt n1大于n2
- -lt n1小于n2
- -ge 大于等于
- -le 小于等于

脚本的变量交互还可以用 ${0}、${1}、${2}、${3} 来进行,${0} 表示执行的脚本名、${1} 表示输入的第一个变量、${2}表示输入的第二个变量、${3} 表示输入的第三个变量
if 条件判断
case 条件判断

流程控制(循环):
while 循环
for 循环
for 循环
函数:
注意点:和传统语言不同,函数必须定义在脚本最前面,以便程序执行的时候可以认识函数。函数 形参 也是用${1}、${2}、${3} 来传参,也就是说函数内的${1}/${2}/${3} 辨认的调函数时传进去的实参。而不是 执行脚本传递时的参数