insularisland 2019-12-04
变量类型:字符型、数值型、真、假;事先确定数据的存放格式和长度; 变量存放在内存空间; 编译型语言,没有额外的处理逻辑,属于强类型语言; 脚本型语言,可以有解释器控制;所以,可以是弱类型语言; 强类型:变量在使用前,必须事先声明,甚至还需要初始化(给一个初始值,如果没给一个原始值,里面是随机数); 弱类型:变量用时声明,甚至不需要区分类型(默认为字符串); 变量赋值:VAR-NAME=VALUE; bash shell变量类型: 环境变量 本地变量(局部变量),局部变量不一定都是本地变量 位置变量 特殊变量(bash shell内置的;系统变量) 本地变量:VAR-NAME=VALUE;作用域为整个bash进程; 局部变量:local VAR-NAME=VALUE;作用域为当前代码段; 环境变量:export VAR-NAME=VALUE;作用域为当前shell进程及其子进程; 位置变量:$1(第一个位置变量)、$2(第二个位置变量)... 特殊变量:$?(保存上一个命令执行状态返回值);程序状态返回代码(0——255);0表示正确执行;1——255表示错误执行; 执行bash shell脚本,就相当于执行一个进程,如果进程关闭,则变量就无效了; 脚本在执行时,会启动一个当前shell的子shell进程;命令行中启动的脚本会继承当前shell环境变量;系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量; 变量引用:${VAR-NAME},当变量名不造成混淆时,括号可省略; 撤销变量:unset VAR-NAME(不要加$符号); 查看当前shell中的变量:set(包括环境变量和本地变量); 查看当前shell中的环境变量:export、printenv、env; 往原有变量中添加新的数值: [ ~]# ANIMALS=pig [ ~]# echo $ANIMALS pig [ ~]# ANIMALS=$ANIMALS:goat [ ~]# echo $ANIMALS pig:goat 注意: 1、变量名称只能包含字母、数字和下划线,并且不能以数字开头 2、不能和系统中已有的环境变量重名 3、最好做到见名知意
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序; 脚本中放的都是命令,并不是可执行的程序,不是对应的二进制符号,所以直接提交到内核执行的话,内核是理解不了脚本中的命令的,内核理解的是ELF格式; ELF:可执行的、可链接的文件格式;linux内核只能识别ELF格式进行执行,写完的脚本是ascii,内核是执行不了的; 要想内核能够读懂脚本,需要内核开启脚本解释器,添加shebang机制; 在脚本中的第一行添加:#!/bin/bash 指定解释器的位置; shebang:指定程序的魔数; 写完的脚本需要加执行权限才能执行,或者使用解释器执行:bash SCRIPT-NAME;脚本名需要以 .sh 为后缀;
输出重定向: >:输出覆盖重定向 >>:追加重定向 2>:错误重定向 2>>:错误追加重定向 &>:同时重定向 /dev/null:软件设备,数据黑洞,可以把命令的输出结果放到数据黑洞里面,不在屏幕上打印 执行脚本时,要想命令的执行结果不在屏幕上打印可以使用重定向配合数据黑洞:&>/dev/null