您的位置:首页 > 运维架构 > Shell

bash 脚本编程 变量、变量类型 (笔记)

2015-03-19 11:36 274 查看
Shell 脚本编程
fgrep fast grep 快速检索文本但是不支持正规则表达式

编程语言: 机器语言、汇编语言、高级语言(需编译)
编译器or解释器: 是用来把人类所能识别的语言(通常为高级语言)翻译成机器所能识别
的语言(即机器语言)
静态语言:编译型语言 强类型(变量) 关键字 事先完全转换成可执行格式
C、C++、JAVA、C#...等

动态语言:解释型语言 强类型(变量) 边解释边执行
PHP、SHELL、Python、Perl

编程模型:
面向过程: 所对应的语言:Shell C

面向对象: 所对应的语言:JAVA Python Perl C++

变量:变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。
内存:编址的存储单元

程序运行产生进程
变量类型: 字符 数值(数值分为整形,浮点形) 事先确定数据的存储格式和长度。

逻辑运算(布尔定律):与 and 只有同时为真值为真,近似乘法 (串连电路 两个开关)
或 or 只有同时为假值为假,近似加法 (并连电路 两个开关)
异或 xor 相同为假 不同为真
非 非0等于1 非1等于0
shell属于弱类型编程语言
强: 变量在使用前,必须事先声明,甚至还需要初始化null
弱: 变量用时声明,甚至不区分类型(默认为字符串)
变量赋值:VAR_NAME=VALUE

bash变量类型:
环境变量: 整个shell进程 作用域为当前shell进程及其子进程都可引用

export VARNMME=VALUE 导出

本地变量(局部变量): 仅在当前一段代码有效 Local VARNAME=VALUE

位置变量:$1,$2,$3 ...等
特殊变量:$? 上一个命令的执行状态返回值

程序执行,可能有两类返回值:
程序执行结果,程序状态返回代码(0-255)
0 表示正确执行
1-255 错误执行

1,2,127,此三个错误执行代码,系统预留。
/dev/null 软件设备 bit bucket位桶 数据黑洞,任何数据放到此文件夹下,就会变为空

脚本在执行时会启动一个子shell进程
命令行中启动的脚本会继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量

""双引号 弱引用可做变量替换
例:[root@localhost ~]# NAME=ljm
[root@localhost ~]# echo "This is $NAME"
This is ljm
[root@localhost ~]#
''单引号 强引用 不可变量替换
例:[root@localhost ~]# NAME=ljm
[root@localhost ~]# echo "This is $NAME"
This is $NAME
[root@localhost ~]#

设置变量 set VARNAME=VALUE 或者 VARNAME=VALUE 可直接变量加变量值即可不加set也可以
撤消变量 unset VARNAME

只要操作变量本身而非变量值则不需要加$符号,
变量新加值 VARNAME=$VARNAME:VALUE
查看变量 set 不加参数(参加当前shell变量 环境变量+本地变量)
查看环境变量 printevn env export 三个命令都可
注:特殊变量和位置变量不可查看

对于shell来讲默认所有变量的值都是字符串,所以字符串默认不可做字符运算

脚本: 命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序。 .sh结尾

shebang 魔数 #!/bin/bash
内核无法直接识别ASCII码文本,内核所能识别的elf格式的文件(Elf文件是一种二进制文件,可执行文件,目标代码,共享库和核心转储的标准文件格式)若想让内核识别脚本必须借助解释器来转换。所以脚本是借助bash可执行程序来执行的,即脚本前需加 #!/bin/bash 内核无法识别但看到此会把这个脚本交给bash程序处理,即可执行此文件。
Shebang 这个符号通常在unix 系统的脚本中第一行开关中写到,它指明了执行这个脚本文件的解释程序
1.如果脚本文件中没有#!这一行,那么执行时默认以当前shell去解释这个脚本(即:$shell环境变量)
2.如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时就会把文件名及其数据传给那个解释程序去执行。
3.如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: permission denied "如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前shell去执行这个脚本。
4.如果#!指定的程序不存在,那么会报错"bad interpreter:No such file or directory."注意#!之后的解释程序,需要写绝对路径(如:/bin/bash),且是不会自动到$PATH中寻找解释器的。
5.如果你使用"bash test.sh"这样的命令来执行脚本那么#!这一行将会被忽略掉,且脚本文件中可以没有执行权限也能被执行。解释器是用命令行中显式指定的bash。 #为注释行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Shell bash 脚本编程