张家港手机网站建设,百度小程序开发工具,wordpress用户爆破,烟台论坛建站模板bash的基础特性#xff08;续#xff09;#xff1a;
1、提供了编程环境#xff1a; 编程风格#xff1a;过程式#xff1a;以指令为中心#xff0c;数据服务于执行#xff1b;对象式#xff1a;以数据为中心#xff0c;指令服务于数据
shell编程#xff0c;编译执…bash的基础特性续
1、提供了编程环境 编程风格过程式以指令为中心数据服务于执行对象式以数据为中心指令服务于数据
shell编程编译执行。基本结构数据存储变量、数组表达式语句。命令的堆砌
shell脚本文本文件 #!/bin/bash #!/usr/bin/python #!/usr/bin/perl
shebang告诉cpu解释器是什么由谁来解释其后的内容。
magic number魔数 #
第一个shell脚本first.sh
#!/bin/bash
#
cat /etc/fstab
wc -l /etc/fstabshell脚本就是一个文本文件如何运行呢就靠第一行来告诉cpu使用/bin/bash来执行。所以下面的命令都是bash运行的。就像我们在bash交互界面输入cat然后输入wc命令一样顺序执行将结果输出。
运行在当前目录下直接运行first.sh提示
linux不像window默认会先找当前目录而是根据PATH环境变量的值顺序查找first.sh。其值
因为并没有当前目录我的当前目录是~/myscripts/所以要给定明确的路径如./firsht.sh或绝对路径~/myscripts/first.sh
上一篇学过文件权限时提到过创建的文件权限默认是没有执行权限x的所以这里提示没有权限执行。增加执行权
执行 也可以不为文件赋执行权限而是手动启动即执行bash first.sh即不使用shebang而是我们手动指定了解释器。 变量命名的内存空间。 变量类型数据存储格式、存储空间大小、能参与的运算、数据的表示范围。字符和数值——整型、浮点型 编程语言强类型---定义变量时必须指定类型、弱类型---shell是弱类型类型隐式转换变量无需事先定义可直接调用。 逻辑运算结果true、false。与、或||、非!、异或 短路运算 与第一个为0结果必为0第一个为1第二个必须参与运算。 或第一个为1结果必定为1第一个为0第二个必须参与运算。 Linux上文本处理三剑客 grep文本过滤模式pattern工具 grep、egrep、fgrep sedstream editor文本编辑工具 awkLinux上的实现gawk文本报告生成器。
grepGlobal search REgular expression and Print out theline 作用文本搜索工具根据用户指定的“模式”对目标文本逐行进行匹配检查打印匹配到的行 模式由正则表达式字符及文本字符所编写的过滤条件 REGEXP由一类特殊字符及文本字符所编写的模式其中有些字符不表示字符字面意义而表示控制或通配的功能。 分两类基本正则表达式BRE扩展正则表达式EREgrep -Eegrep 正则表达式引擎 grep [OPTIONS] PATTERN [FILE...] --colorauto对匹配到的文本着色显示 -v 反向匹配显示不匹配的行 -i 匹配时忽略大小写 -o 仅显示匹配的字串 -q 静默模式不输出任何信息 -A # after匹配行及后#行 -B # before匹配行及前#行 -C # context前后各#行 -E 使用ERE
基本正则表达式元字符 字符匹配 . 匹配任意单位字符[] 匹配指定范围内的任意单个字符[^]匹配指定范围外的任意单个字符[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]、 匹配次数用在要指定次数的字符后面指定前面的字符要出现的次数工作于贪婪模式。 * 匹配前面的字符任意次仅表示次数。grep “x*y” ——abxyxay都可以匹配 .* : 任意长度的任意字符 \? 匹配其前面的字符0或1次。 \ 匹配前面字符至少1次。 \{m\} 匹配前面的字符m次。grep [:alpha:]\{3\}y \{m,n\} : 匹配前面的字符至少m次至多n次。 \{0,n\},匹配前面字符至多n次\{m,\}匹配前面字符至少m次。 位置锚定 ^ 行首锚定。用于模式的最左侧 ^root $ 行尾锚定。用于模式的最右侧 root$ ^PATTERN$ 用于模式匹配整行 ^$空行^[[:space:]]*$空白行 \ 或 \b 词首锚定用于单词模式的左侧 \ 或 \B 词尾锚定用于单词模式的右侧 \PATTERN\ 匹配整个单词 分组 \(\) : 将一个或多个字符捆绑在一起作为一个整体进行处理 注意分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中这些变量命名方式为\1,\2,\3... \1 从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 后向引用引用前面的分组括号中的模式所匹配字符而非模式本身。
egrep及扩展的正则表达式
egrep [OPTIONS] PATTERN [FILE...] 扩展正则表达式的元字符 字符匹配. 、[]、 [^] 次数匹配*任意次、0或1次、1次或多次、{m}m次、{mn}至少m至多c次。 锚定^、$、\ 或\b、\或\b、 分组()后向引用\1,\2\3... 或者a|b 如 C|cat C或cat(C|c)atCat或cat
fgrep不支持正则表达式搜素。
bash基础特性续
变量类型 bash中的变量的种类 根据变量的生效范围等标准 本地变量生效范围为当前shell进程对当前shell之外的其他shell进程包括当前shell的子shell进程均无效。 环境变量生效范围为当前shell进程及其子进程。declare -x namevalue 局部变量生效范围为当前shell进程中某代码片段通常指函数。 位置变量$1,$2,$3...来表示用于让脚本在脚本代码中调用通过命令行传递给他的参数。 特殊变量$?,$0,$*,$,$#
本地变量 变量赋值namevalue value1可以是直接字串---nameusername 2变量引用---name$username3命令引用---nameCOMMAND注意是反引号name$(COMMAND) 变量引用${name},$name 弱引用其中的变量引用会被替换为变量值 强引用其中的变量引用不会被替换为变量值保持原字符串。 显示已定义的变量set 销毁变量unset name
环境变量 变量声明、赋值 export namevalue declare -x namevalue 变量引用$name,${name} 显示所有环境变量export 、 env、 printenv 销毁unset name bash有许多内建的环境变量PATH、SHELL、UID、HISTSIZE、HOME、PWD、OLD、HISTFILE、PS1、
变量命名法则不能使用关键字只能使用字母、数字及下划线且不能以数字开头见名知义
只读变量readonly name declare -r name 不能修改不能unset销毁
位置变量接收参数。 $* 传递给脚本的所有参数 $传递给脚本的所有参数 $#传递给脚本的所有参数的个数 shift # 换岗操作
bash的配置文件 按生效范围划分两类 全局配置 /etc/profile 以及/etc/profile.d/*.sh /etc/bashrc 个人配置 ~/.bash_profile ~/.bashrc 按功能划分两类并不绝对 profile类为交互式登录的shell提供配置 全局/etc/profile, /etc/profile.d/*.sh 个人~/.bash_profile 功用1)用于定义环境变量2)运行命令或脚本 bashrc类为非交互式登录的shell提供配置 全局/etc/bashrc 个人~/.bashrc 功用1定义命令别名2定义本地变量
shell登录 交互式登录直接通过终端输入账号密码登录使用“su - UserName”或“su -l UserName” 读取顺序 /etc/profile -- /etc/profile.d/*.sh -- ~/.bash_profile -- ~/.bashrc -- /etc/bashrc 非交互式登录su UserName图形界面下打开的终端执行脚本 读取顺序 ~/.bashrc -- /etc/bashrc -- /etc/profile.d/*.sh
bash中的算术运算、-、*、/、%、** 实现算术运算1let var算术表达式2var$[算术表达式] 3var$((算术表达式))4var$(expr arg1 arg2 arg3 ...) ,注意有些符号要转义 bash内建的随机数生成器$RANDOM 增强型赋值*/,%,,- 如let count1自增、自减let varlet var--
条件测试专用的测试表达式需要由测试命令辅助完成测试过程 测试命令 test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 注意EXPRESSION前后必须有空白字符。
bash的测试类型 数值测试-gt大于 -ge大于等于 -eq等于 -ne不等于 -lt小于 -le小于等于 字符串测试/等于 大于小于 !不等于 ~左侧字符串能否被右侧的PATTERN所匹配 -z “STRING”测试字符串是否为空空为真-n “STRING”测试字符串是否不空不空为真 注意用于字符串比较时用到的操作数都应该使用引号。 文件测试man bash 存在性测试 -a FILE文件存在 -e FILE 文件存在则为真不存在为假 存在性及类别测试 -b FILE存在且为块设备 -c FILE存在且为字符设备 -d FILE存在且为目录 -f FILE存在且为普通文件 -h FILE或-l存在且为符号链接 -p FILE存在且为命名管道 -S FILE存在且为套接字 文件权限测试 -r FILE存在且可读 -w FILE存在且可写 -x FILE存在且可执行 文件特殊权限测试 -g FILE存在且拥有sgid权限 -u FILE存在且拥有suid权限 -k FILE存在且拥有sticky权限 文件大小测试 -s FILE存在且非空 文件打开性测试 -t fdfd表示的文件描述符是否已经打开且与终端相关 -N FILE文件自上一次被读取之后是否被修改过 -O FILE当前用户是否为文件属主 -G FILE当前有效用户是否为文件的属组 双目测试 FILE1 -ef FILE 1与2是否指向同一个设备上的相同inode FILE1 -nt FILE 1是否新于2 FILE1 -ot FILE 1是否旧于2 组合测试条件 逻辑运算两种方式 1CMD1CMD2 、CMD1||CMD2、 !CMD 2EXPRESION1 -a EXPRESION2、EXPRESION1 -o EXPRESION2、
bash自定义退出状态码exit [n] 注意脚本中一旦遇到exit命令脚本会立即终止终止退出状态取决于exit命令后面的数字如果未给脚本指定退出状态码整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码。
vim编辑器
viVisual Interface文本编辑器行编辑器--sed、全屏编辑器--nano
vi是一个模式化的编辑器 基本模式编辑模式---命令模式 输入模式 末行模式内置的命令行接口 打开文件vim [option] file... # 打开文件后直接让光标处于第#行的行首 /PATTERN打开文件后直接让光标处于第一个被PATTERN匹配到的行的行首 模式转换 编辑模式 -- 输入模式 i insert在光标所在处输入 aappend在光标所在处后面输入 o在当前光标所在行的下方打开一个新行 I在当前光标所在行行首输入 A在当前光标所在行行尾输入 O在当前光标所在行上方打开一个新行输入 c改变命令删空并输入 C 输入模式 -- 编辑模式 ESC 编辑模式 -- 末行模式 末行模式 -- 编辑模式 ESC
关闭文件 q 退出 q!强制退出丢弃做出的修改 qw 保存退出x 保存退出 w /PATH/TO/SOMEWHERE 另存为 ZZ保存退出 光标跳转 字符间跳转h左j下k上l右 #COMMAND跳转由#指定的个数的字符如7j向下7行 单词间跳转 w下一个单词词首e当前或下一个单词的词尾b当前或前一个单词词首 #COMMAND由#指定一次跳转的单词数 行首行尾跳转 ^行首第一个非空白字符 0行首 $行尾 行间跳转 #G跳转至#行 G最后一行 1Ggg第一行 句间移动 ) ; ( 段落间移动}{ vim的编辑命令 字符编辑 x删除光标处的字符 #x删除光标处起始的#个字符 xp交换光标所在处及其后面字符的位置。 替换命令rreplace r替换光标所在处的字符 #r替换光标开始后的#个字符 删除命令 d删除命令可结合光标跳转字符实现范围删除如的d$删到行尾 d$、d^、d0、dw、de、db、#COMMAND dd删除光标所在的行 #dd删多行 粘贴命令pputpaste p缓冲区中存储的如果为整行则粘贴至当前光标所在行的下方否则粘贴至当前光标所在处后面 P缓冲区中存储的如果为整行则粘贴至当前光标所在行的上方否则粘贴至当前光标所在处前面 复制命令yyank y复制工作行为类似于d命令 y$、y0、y^、 ye、yw、yb、 #COMMAND yy复制行 #yy复制多行 改变命令cchange c修改编辑模式--输入模式 c$、c0、c^、 ce、cw、cb、 #COMMAND cc删除并输入新内容 #cc删除多行并输入新内容 可视化模式 v按字符选定 V按行选定 经常结合编辑命令d c y 撤销此前的编辑 uundo撤销此前的操作 #u撤销此前#次操作 撤销此前的撤销Ctrl r 重复前一个编辑操作. 点号 翻屏操作 Ctrlf 向尾部翻一屏 Ctrlb向首部翻一屏 Ctrld 向尾部翻半屏 Ctrlu向首部翻半屏 vim中的末行模式 1地址定界 —— start_posend_pos #具体第#行 ##从左侧#表示行起始到右侧#表示行结尾 ##从左侧#表示行起始加上右侧#表示的行数 .当前行 $最后一行 .,$-1 %全文相当于1$ /pat1/, /pat2/ 从第一次被pat1模式匹配的行开始到第一次被pat2模式匹配的行结尾 使用方式 后跟一个编辑命令 d、y、w 、r w /PATH/TO/SOMEWHERE 将范围内的行另存至指定文件 r /PATH/TO/SOMEWHERE 在指定位置插入指定文件中的所有内容 2查找 /PATTERN 从当前光标所在处向文件尾部查找 PATTERN 从当前光标所在处向文件首部查找 n、N同方向、反方向跳转 3查找并替换 s在末行模式下完成查找替换操作 s/要查找的内容/替换为的内容/修饰符要查找的内容可使用模式替换的内容不能使用模式但可以使用\1,\2,...等向后引用符号还可以使用“”引用前面查找时查找到的整个内容 修饰符i忽略大小写g全局替换默认情况下每行只替换第一次出现 .,$s/r\(..\)t/R\1T/g 查找替换中的分隔符/可替换为其他字符如s、s### 多文件模式 vim FILE1 FILE2 FILE3 ... next 下一个文件 prev 前一个 first第一个 last最后一个 wall 保存所有 qall退出所有。 窗口分隔模式 vim -o|-O FILE1 FILE2 FILE3 ... -o,水平分隔-O垂直分隔 在窗口间切换CtrlwArrow 单文件窗口分割Ctrlwssplit水平分隔 Ctrlwvvertical垂直分隔
定制vim的工作特性 配置文件 全局/etc/vimrc 个人~/.vimrc 末行当前vim进程有效 1行号set numberset nu显示行号setnonumberset nonu取消行号 2括号匹配set showmatchset sm 匹配set nosm取消匹配 3自动缩进set ai 启用set noai 取消 4高亮搜索set hlsearch 启用set nohlsearch取消 5语法高亮syntax on启用syntax off取消 6忽略字符的大小写set ic忽略set noic不忽略