bash脚本编程(与面向过程相似)
一、基础知识
1、程序:语句和表达式
顺序执行
选择执行
循环执行
2、 程序 = 指令 + 数据
面向过程编程 :以指令为中心组织数据
面向对象编程 :以数据为中心组织指令
3、程序的执行模型 :
(以C语言编程为例)编译执行:源代码—》预处理—》编译—》汇编—》链接(通过编译器)—》运行
(bash脚本编程) 解释执行:源码 —》(解释器)—》 运行
bash脚本的解释器bash
bash脚本一般以.sh结尾,例如vim test1.sh
脚本的第一行:shebang(指定解释器)即为#!/bin/bash,#前永远不能出现空格空行。
4、变量:命名的内存空间(按变量名提取内存中的变量值/数据值)
数据类型
(1)定义了数据存储格式
(2)数据的表示范围
(3)可以参与的运算类型不一样
数据按强弱来分,分为
强类型:对数据严格要求,如C语言中对数据类型要求就是强类型。
弱类型:bash把所有值都默认当作字符,所以bash脚本编程就是弱类型。
数据按格式来分,分为
(1)数值型:
精确数值型:整数
近似数值型:float(单精度) double(双精度) 浮点型
(2)字符型
(3)布尔型:(用于脚本的选择判断)
true 1 false 0
逻辑与运算: && a && b 全真才为真
逻辑或运算: || a || b 全假才为假
逻辑非运算: ! !a 取反的运算
二、bash变量类型
1、本地变量:只对当前shell进程有效,对当前shell进程之外的shell进程无效(例:本地变量对父shell进程 和子shell进程无效)。
2、 环境变量:对当前shell进程及其子shell进程有效。
env/printenv 显示当前shell中的所用环境变量
export创建/修改环境变量
例:创建一个openstack环境变量
3、局部变量:仅对某一段代码空间有效的变量,通常用于脚本函数
4、位置变量:$1 $2,...
5、特殊变量:$? $0 $# $$ $* $@
变量的引用
标准引用: ${变量名} 例:$SHELL(${SHELL})
强引用:‘root shell is $SHELL’
强引用会原样输出。
弱引用:“root shell is $SHELL”
弱引用显示环境变量的值。
三、变量的命名规则
1、不能用程序中的关键字:if elif fi then for ....
2、只能使用数字、字母或下划线,且不能以数字开头
3、尽量做到见名知意
四、文件查看及处理工具
之前学过的文件相关命令cat less more tail head touch stat cp rm mv
1、wc [选项] 文件名
-l 统计文件行数
-c 统计文件字符数
-w 统计文件单词数
例:分别统计/etc/passwd文件的行数,字符数,单词数结果如下
2、cut(按分隔符)截取文件内容
cut [选项] 文件名
-d 分隔符 指定按什么分隔符截取文件内容 (不指定默认的分割符就是空格)
-f #/#-#/#,#.. 指定要显示的字段(#代表数字)
例:显示/etc/passwd文件最后一行的用户的UID
3、sort [选项] 文件名
-n 按数值大小排序
-r 逆序排序
-f 忽略字符大小写
-t 分隔符 指定分隔符
-k # 按第#个字段进行排序
-u 去重选项
在/tmp下新建一个sort文件,内容如下
注:-r逆序排序指的是按首个数字进行的排序,若想按数值大小排序,应按如下操作
去掉/tmp/sort文件中重复的内容,如下
将/etc/passwd文件中的用户信息,按UID的数值大小进行排序,如下
4、uniq(统计命令统计)每一行出现的次数
uniq [选项] 文件
-c 统计每行出现的次数
-d 仅显示重复的行
-u 仅显示不重复的行
注:uniq 统计中的重复指的是相邻行的重复。
练习:只ifconfig的ip地址
练习1:编写一个脚本
(1)创建一个目录/tmp/testdir
(2) 复制/etc/fstab,/etc/rc.d/rc.sysinit 到/tem/testdir下
vim /tmp/testdir.sh
#!/bin/bash
mkdir /tmp/testdir
cp /etc/fstab /etc/rc.d/rc.sysinit /tmp/testdir
通过bash -x 文件名查看脚本运行情况。
练习2:编写一个脚本
(1)显示当期系统上GID最大的5个组和其GID号;要求逆序显示
(2)显示/etc/passwd文件的行数
vim /tmp/gid.sh
#!/bin/bash
cut -d : -f 1,3 /etc/group |sort -t : -k 2 -n -r |head -5
wc -l /etc/passwd |cut -d" " -f 1
通过bash -x 文件名查看脚本运行情况。
五、bash的配置文件
1、profile类:为交互式登陆的shell进程提供配置。
对所有用户有效的配置文件即全局有效: /etc/profile
/etc/profile.d/*.sh
仅对当前用户有效的配置文件即用户个人有效:~/bash_profile
profile类配置文件的功用:
(1)用以定义环境变量
(2)运行命令或脚本
2、bashrc类:为非交互式登陆的shell进程提供配置。
全局有效:/etc/bashrc
个人用户有效:~/.bashrc
bashrc类配置文件的功用:
(1)定义本地变量
(2)定义命令别名
如何使修改后的bash配置文件重新生效:
source源文件 .配置文件
配置文件生效的优先级:
交互式登陆:/etc/profile->/etc/profile.d/*.sh->~/bash_profile->~/.bashrc->/etc/bashrc所以定义此文件可以使其他文件全都生效。
非交互式登陆:~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
原文地址:http://littlehorse.blog.51cto.com/10066209/1631619