原文:http://blog.51cto.com/woyaoxuelinux/1863045
shell: 弱类型编程语言
强:变量在使用前,必须事先声明,甚至还需要初始化;
弱:变量用时声明,甚至不区分类型;
变量赋值:VAR_NAME=VALUE
bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量
本地变量:
set VARNAME=VALUE: 作用域为整个bash进程;
局部变量:
local VARNAME=VALUE:作用域为当前代码段;
环境变量:作用域为当前shell进程及其子进程;
export VARNAME=VALUE
VARNAME=VALUE
export VARNAME
“导出”
位置变量:
$0,$1, $2, ... $0表示命令本身,$1表示第一个参数,依次类推$3表示第三个参数
shift n 轮替,n表示数字 把后面第n个参数轮替到第一个参数
eg: vim shift.sh
#!/bin/bash
#
echo $1
shift 2
echo $1
shift 2
echo $1
./shift.sh 1 2 3 4 5
[root@xuelinux test]# ./shift.sh 1 2 3 4 5
1
3
5
特殊变量:
$?: 上一个命令的执行状态返回值;
$#: 参数的个数
$*: 参数列表
$@: 参数列表
程序执行,可能有两类返回值:
程序执行结果
程序状态返回代码(0-255)
0: 正确执行
1-255:错误执行,1,2,127系统预留;
输出重定向:
> 输出覆盖重定向
>> 输出追加重定向
2> 错误输出覆盖重定向
2>>错误输出追加重定向
&> 正确错误输出重定向
撤消变量:
unset VARNAME VARNAME是变量名
查看当shell中变量:
set VARNAME 不过set可以省略 VARNAME是变量名
查看当前shell中的环境变量命令如下:
printenv
env
export
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
shebang: 魔数
#!/bin/bash
# 注释行,不执行
/dev/null: 软件设备, bit bucket,数据黑洞
脚本在执行时会启动一个子shell进程;
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;