一、脚本生效
1. 方法一
把脚本路径写入$PATH变量。
2. 方法二
带上路径执行,需要执行权限。
3. 方法三
bash
bash后跟上脚本,该方法脚本不需要执行权限也能运行。
4. 方法四
| bash
读入脚本内容,通过管道符交给bash执行。当前主机远程调用其他主机的脚本。
二、基本结构
1. 声明shell类型
#!/bin/bash
2. 变量
3. 函数
4. 主程序
三、变量
在编写脚本时,如果使用了变量,使用完毕后要使用uset删除变量。因为程序运行期间,如果不人为删除变量,变量将不会在内存中释放空间。
把命令赋值给变量,如果使用echo,只会返回命令本身,不会返回命令结果,因为echo只会把变量的赋值当成字符串处理。
1. 局部变量
1.1 特性
(1) 如果把文本内容当作变量赋值,echo $执行时,如果不带上双引号,内容会以一行显示;如果带上双引号,会保留原有文本格式。
(2) 变量1指向赋值1,变量2指向变量1,实际上变量2是指向赋值1。如果此时变量1指向赋值2,变量2仍指向赋值1。
(3) 局部变量不能在父进程和子进程之间传递。
2. 环境(全局变量)变量
2.1 特性
(1) 父进程的全局变量可以传给子进程使用,但子进程修改后不能传回给父进程。
(2) 如果命令能识别变量,变量前不需要加上$。
四、逻辑运算
1. 短路与
cmd1 && cmd2; cmd3
如果cmd1为真,cmd2执行;如果cmd1为假,cmd2不执行,cmd3执行。
2. 短路或
cmd1 || cmd2; cmd3
如果cmd1为真,cmd2不执行,cmd3执行;如果cmd1为假,cmd2执行。
五、逻辑判断
变量在中括号时,要加上双引号,避免因变量为空导致语法错误。因为条件判断语句需要前后都有值才能做比较。
1. 括号
1.1 特性
大括号:不开启子shell,如果括号内有exit,会直接退出当前shell;
小括号:会开启子shell,如果括号内有exit,只会退出子shell。
如果在脚本中,要使用大括号,且最后要加上分号。
中括号:如果括号内有正则表达式,需要用两个中括号;如果括号内没有正则表达式,只需要一个中括号。
双中括号可以使用双等号匹配字符通配符。
六、赋值
read命令可以批量给多个变量赋值,但值需要用空格隔开,也可以用<读取文件中的内容进行赋值,也需要用空格隔开。
七、执行脚本
使用传统方式执行脚本文件,会先开启子进程,在子进程中执行脚本文件,不影响当前shell;
使用.或source执行脚本文件,会直接在父进程中执行脚本文件,影响当前shell。
别名命令不能在脚本中运行。
八、bash展开命令行顺序
1. 把命令行分成单个命令词
2. 展开别名
3. 展开大括号的声明( {})
4. 展开波浪符声明( ~)
5. 命令替换$() 和 ``)
6. 再次把命令行分成命令词
7. 展开文件通配( *、 ?、 [abc]等等)
8. 准备I/0重导向( <、 >)
9. 运行命令