1 bash特性及bash脚本编程初步 2 终端,附着在终端的接口程序; 3 GUI: KDE,GNome,Xfce 4 CLI: /etc/shells 5 6 bash的特性: 7 命令行展开: ~,{} 8 命令别名: alias,unalias 9 命令历史: history 10 文件名通配: glob 11 快捷键:ctrl + a ,e,u,k,l 12 命令补全:$PATH 13 路径补全: 14 15 bash特性之: 命令hash 16 缓存此前命令的查找结果: key-value 17 key : 搜索键 18 value : 值 19 hash命令 : 20 hash: 列出 21 hash -d cmd: 删除 22 hash -r : 清空 23 24 bash的特性之一: 变量 25 程序: 指令+数据 26 指令:由程序文件提供; 27 数据:IO设备,文件,管道,变量 28 程序: 算法+数据 29 变量名+指向的内存空间 30 变量赋值: name=value 31 变量类型: 存储格式,表示数据范围,参与的运算 32 编程语言: 33 强类型变量: 34 弱类型变量:bash把所有变量统统视为字符型;bash中的变量无需事先声明; 35 变量替换:把变量名出现的位置替换为其所指向的内存空间中数据; 36 变量引用:${var_name},$var_name 37 变量名:包含字母,数字和下划线(开头不能是数字) 38 变量名:见名知义,命令机制遵循某种法则,以便区分,理解;不能使用程序的保留字,例如:if,else,while等 39 40 bash变量类型: 41 本地变量:作用域仅为当前shell进程 42 环境变量:作用域为当前shell进程及其子进程 43 局部变量:作用域仅为某代码片段(函数上下文) 44 45 位置参数变量:当执行脚本的shell进程传递的参数; 46 特殊变量:shell内置的有特殊功用的变量; 47 $?: 48 0:成功 49 1-255: 失败 50 51 本地变量: 52 变量赋值:name=value 53 变量引用:${name},$name 54 "":变量名会替换为其值; 55 '':变量名不会替换为其值; 56 查看变量:set 57 撤销变量:unset name 58 注意:此处非变量引用; 59 环境变量: 60 变量赋值: 61 (1) export name=value 62 (2) name=value 63 export name 64 (3) delcare -x name=value 65 (4) name=value 66 declare -x name 67 变量引用:${name},$name 68 69 注意: bash内嵌了许多环境变量(通常为全大写字符),用于定义bash工作环境 70 PATH,HISTSIZE,HISTFILE,SHELL,HOME,UID,PWD... 71 查看环境变量:export,declare -x,env,printenv 72 撤销环境变量:unset name 73 74 只读变量: 75 (1) declare -r name 76 (2) readonly name 77 78 只读变量无法重新赋值,并且不支持撤销;存活时间为当前shell进程的生命周期,随shell进程进程终止而终止; 79 80 bash特性之一多命令执行: 81 # cmd1 ; cmd2 ; cmd3 ; ... 82 83 逻辑运算: 84 运算数: 真(true,yes,on,1) 85 假(false,no,off,0) 86 与: 87 1 && 0 = 0 88 或: 89 1 || 0 = 1 90 非: 91 ! 1 = 0 92 异或:判断是否相同,相同为0,相异为1; 93 94 短路法则: 95 示例:# id $username || useradd $username 96 97 shell脚本编程: 98 编程语言分类:根据运行方式 99 编译运行:源代码-->编译器(编译)-->程序文件 100 101 解释运行:源代码-->运行时启动解释器,由解释器边解释边运行; 102 根据其编程中功能的实现是调用库还是调用外部的程序文件; 103 shell脚本编程: 104 利用系统上的命令及编程组件进行编程; 105 完整编程: 106 利用库或编程组件进行编程; 107 108 编程模型:过程式编程语言,面向对象的编程语言 109 过程式:以指令为中心来组织代码,数据服务于代码; 110 顺序执行 111 选择执行 112 循环执行 113 如:c,bash 114 对象式:以数据为中心来组织代码,围绕数据来组织指令; 115 类(class): 实例化对象,method; 116 如:Java,c++,Python 117 118 shell脚本编程:过程式编程,解释运行,依赖外部程序文件运行 119 如何写shell脚本: 120 脚本文件的第一行,定格:给出shebang,解释器路径,用于指明解释器当前脚本的解释器程序文件 121 常见的解释器: 122 #!/bin/bash 123 #!/usr/bin/python 124 125 文本编辑器:nano 126 行编辑器:sed 127 全屏编辑器:nano,vi,vim 128 129 shell脚本是什么? 130 命令的堆积; 131 但很多命令不具幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行中发生错误; 132 运行脚本: 133 (1)赋予执行权限,并直接运行行命令参数传递给解释器程序; 134 chmod +x /PATH 135 /PATH 136 (2) 直接运行解释器,将脚本以命令行参数传递给解释器程序; 137 bash /PATH 138 139 注意: 脚本中的空白行会被解释器忽略; 140 脚本中,除了shebang,余下所有以#开头的行,都会被视作注释行被忽略; 141 shell脚本的运行是通过运行一个子shell进程实现的; 142 143 练习:写脚本 144 (1) 显示/etc目录下所有以大写p或小写p开头的文件或目录本身; 145 (2) 显示/var 目录下的所有文件或目录本身,并将显示结果中的小写转换为大写后显示; 146 (3) 创建临时文件/tmp/myfile.xxxx; 147 148 bash的配置文件: 149 两类: 150 profile类:为交互式登录的shell进程提供配置 151 bashrc类:为非交互式登录的shell进程配置 152 登录类型: 153 交互式登录shell进程: 154 直接通过某终端输入账号和密码后登录打开的shell进程; 155 使用su - username 或者 su -l username执行的登录切换; 156 非交互式登录shell进程: 157 su username执行的登录切换; 158 图形界面下打开的终端; 159 运行脚本 160 profile类: 161 全局:对所有用户都有效; 162 /etc/profile 163 /etc/profile.d/*.sh 164 用户个人:仅对当前用户有效; 165 ~/.bash_profile 166 功用: 167 1.用于定义环境变量; 168 2.用于运行命令和脚本; 169 bashrc类: 170 全局: 171 /etc/bashrc 172 用户个人: 173 ~/.bashrc 174 功用: 175 1.定义本地变量; 176 2.定义命令别名; 177 注意:仅管理员可修改全局配置文件; 178 179 交互式登录shell进程: 180 /etc/profile-->/etc/profile.d/*-->/.bash_profile-->~/.bashrc-->/etc/bashrc 181 182 非交互式登录shell进程: 183 ~/.bash rc-->/etc/bashrc-->/etc/profile.d/* 184 185 命令行中定义的特性,例如变量和别名作用域为当前shell进程的生命周期 186 配置文件定义的特性,只对随后新启动的shell进程有效 187 188 让通过配置文件定义的特性立即生效: 189 (1) 通过命令行重复定义一次; 190 (2) 让shell进程重新读配置文件; 191 ~]# source /PATH 192 ~]# . /PATH 193 194 问题一:定义对所有用户生效的命令别名,例如 cls='clear'? 195 问题二:让centos用户登录是,提供其已经登录,并显示当前系统时间? 196 197 198 文本处理工具: 199 200 Linux上文本处理三剑客: 201 grep: 文本过滤工具(模式: pattern)工具; 202 sed: stream editor,流编辑器;文本编辑工具; 203 awk: Linux上实现为gawk,文本报告生成器(格式化文本); 204 205 正则表达式:regual expression , regexp 206 由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能; 207 分两类: 208 基本正则表达式:BRE 209 扩展正则表达式:ERE 210 211 元字符: \(hello[[:space:]]\+\)\+ 212 213 214 grep: global search regular expression and print out the line 215 作用: 文本搜索工具,根据用户指定的"模式(过滤条件)" 对目标文本逐个进行匹配检查;打印匹配到的行; 216 模式:由正则表达式的元字符及文本符所编写出的过滤条件; 217 218 正则表达式引擎: 219 220 grep [option] pattern [file] 221 grep [option] [-e pattern | -f file] [file...] 222 223 options: 224 --color=auto: 对匹配到的文本着色后高亮显示; 225 -i: ignorecase,忽略字符大小写; 226 -o: 仅显示匹配到的字符本身; 227 -v,--invert-match: 显示不能被模式匹配到的行; 228 -E: 支持使用扩展的正则表达式元字符; 229 -q,quiet,--slience: 静默模式,即不输出如何信息; 230 231 -A # : after,在后#行 232 -B # : before,在前#行 233 -C # : context,前后各#行 234 235 基本正则表达式元字符: 236 字符匹配: 237 .:匹配任意单个字符; 238 []:匹配指定范围内的任意单个字符; 239 [^]:匹配指定范围外的任意单个字符; 240 如:[:punct:],[:alpha:] 241 匹配次数:用在要指明其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式; 242 *: 匹配其前面的字符任意次;0,1,多次; 243 例如: grep "x*y" 244 abxy 245 aby 246 xxxxy 247 .*: 匹配任意长度的任意字符; 248 \?: 0次或1次; 249 \+: 1次或多次; 250 \{m\}: m次; 251 \{m,n\}: 至少m次,至多n次; 252 253 位置锚定: 254 ^: 行首锚定;用于模式的最左侧; 255 $: 行尾锚定的最右侧; 256 ^pattern$ : 用于pattern来匹配整行; 257 ^$: 空白行; 258 ^[[:space:]]*$: 空行或包含空白字符的行; 259 单词:非特殊字符组成的连续字符(字符串)都称为单词; 260 261 \< 或 \b : 词首锚定;用于单词模式左侧; 262 \> 或 \b : 词尾锚定;用于单词模式右侧; 263 \<pattern>\: 匹配完整单词; 264 265 练习: 266 1. 显示/etc/passwd文件中不以/bin/bash结尾的行; 267 2. 找出/etc/passwd文件中的两位数或三位数; 268 3. 找出/etc/rc.d/rc.sysinit或 /etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行; 269 4. 找出"netstat -tan"命令的结果中以'LISTEN'后跟0,1或多个空白符结尾的行; 270 271 分组及引用: 272
shell脚本编程及grep命令
猜你喜欢
转载自www.cnblogs.com/liuyuanq/p/9833908.html
今日推荐
周排行