bash脚本编程
fgrep:不支持正则表达式
静态语言:编译型语言
强类型(变量) 关键字
事先转换成可执行格式
c\c++\JAVA\c#
动态语言:解释型语言
弱类型
边解释边执行
PHP\SHELL\python\perl
变量:内存空间、命名
内存:编址的存储单元
变量类型:事先确定数据的存储格式和长度
缓冲区溢出
bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量
本地变量:
VARNAME=VALUE:作用域为整个bash进程
局部变量:
local VARNAME=VALUE:作用域为当前代码段
环境变量:作用域为当前shell进程及其子进程
export VARNAME=VALUE 或者
VARNAME=VALUE
export VARNAME
“导出”
脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
bash
不同的shell是两个不同的shell进程
引用变量:${VARNAME},括号可以省略
#加{}的情况
[root@localhost ~]# ANIMAL=pig
[root@localhost ~]# echo "There are some $ANIMALs"#引用成新变量
There are some
[root@localhost ~]# echo "There are some ${ANIMAL}s"
There are some pigs
单引号是强引用,不做变量替换:
[root@localhost ~]# echo "There are some ${ANIMAL}s"
There are some pigs
[root@localhost ~]# echo 'There are some ${ANIMAL}s'
There are some ${ANIMAL}s
pstree 看当前是否在子shell中
位置变量:
$1,$2…
特殊变量:
$?:上一个命令的执行状态返回值
程序执行,可能有两类返回值:
程序执行结果
程序状态返回代码(0-255)
0:正确执行
1-255:错误执行:1,2,127系统预留,其他可以自定义
[root@localhost ~]# ls /var
account cache db games kerberos local log nis preserve spool tmp
adm crash empty gopher lib lock mail opt run target yp
[root@localhost ~]# echo $?
0
[root@localhost ~]# lss /var
bash: lss: 未找到命令...
相似命令是: 'ls'
[root@localhost ~]# echo $?
127
输出重定向:
/dev/null/:软件模拟设备,bit bucket,数据黑洞
#用于命令结果对我们没有意义
[root@localhost ~]# id student &> /dev/null
[root@localhost ~]# echo $?
1
撤销变量:
unset VARNAME
查看当前shell中变量:
set
查看当前shell中的环境变量:
printenv
env
export
#补上新变量
[root@localhost ~]# ANIMALS=pig
[root@localhost ~]# ANIMALS=$ANIMALS:goat
[root@localhost ~]# echo $ANIMALS
pig:goat
[root@localhost ~]# ANIMALS=$ANIMALS:sheep
[root@localhost ~]# echo $ANIMALS
pig:goat:sheep
变量不做算术运算:
[root@localhost ~]# A=2
[root@localhost ~]# B=3
[root@localhost ~]# C=$A+$B
[root@localhost ~]# echo $C
2+3
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
Linux内核只能识别ELF格式
shebang:魔数
#!/bin/bash(解释器路径)
[root@localhost ~]# ls -l first.sh
-rw-r--r--. 1 root root 35 10月 16 08:56 first.sh
[root@localhost ~]# chmod +x first.sh
[root@localhost ~]# echo $PATH
/root/.nvm/versions/node/v10.7.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin:/root/bin
[root@localhost ~]# pwd
/root
[root