高级bash脚本编程(三)
高级bash脚本编程
知识点
compound 和 comparison
-a 逻辑与 exp1 -a exp2 如果表达式 exp1 和 exp2 都为真的话,那么结果为真。
-o 逻辑或 exp1 -o exp2 如果表达式 exp1 和 exp2 中至少有一个为真的话,那么结果为真。
注意:这与Bash中的比较操作符 && 和 || 非常相像,但是这个两个操作符是用在双中括号结构中的。
[[ condition1 && condition2 ]]
-o和-a操作符一般都是和test命令或者是单中括号结构一起使用的
if [ "\(exp1" -a "\)exp2" ]
操作符
赋值
- var=27 注意:在"="之后是不允许出现空白字符,不要混淆= 赋值操作符与 = (有空格)测试操作符
算术操作符
- 加法计算
- 减法计算
- 乘法计算
- / 除法计算
- ** 幂运算
- % 模运算,或者是求余运算(返回一次除法运算的余数)
- 位操作符
<< 左移一位(每次左移都相当于乘以2)
<<= “左移-赋值”
let "var <<= 2" #这句的结果就是变量var左移2位(就是乘以4)
>> 右移一位(每次右移都将除以2)
>>= “右移-赋值”(与<<=正好相反)
& 按位与
&= “按位与-赋值”
| 按位或
|= “按位或-赋值”
~ 按位反
! 按位非
^ 按位异或XOR
^= “按位异或-赋值”
- 逻辑操作符
- 使用&&和||进行混合条件测试
- 双中括号的if-test结构要比单中括号的if-test结构更加灵活.
- 其他混杂的操作符
- , 逗号操作符可以连接两个或多个算术运算。所有的操作都会被运行(可能会有负作用),但是只会返回最后操作的结果。
变量
- 内置变量
- $BASH Bash的二进制程序文件的路径(脚本解释器的路径)
- $FUNCNAME 当前函数的名字
- $IFS 内部域分隔符,这个变量用来决定 Bash 在解释字符串时如何识别域,或者单词边界。
- \(REPLY 当没有参数变量提供给 read 命令的时候,这个变量会作为默认变量提供给 read 命令。也 可以用于 select 菜单,但是只提供所选择变量的编号,而不是变量本身的值。在个别版本的bash中,并不支持内置变量\)REPLY。
- 通过\(*和\)@列出所有的参数,"$" 所有的位置参数都被看作为一个单词。 $@与 $ 相同,但是每个参数都是一个独立的引用字符串,这就意味着,参数是被完整 传递的,并没有被解释或扩展。这也意味着,参数列表中每个参数都被看作为单独的单词。
操作字符串
字符串长度
- echo ${#stringZ}
- expr length $stringZ
使用awk来处理字符串
- 提取字符串
echo | awk '
{
print substr("'"${String}"'",3,4) # skid
}
'
- 等价于echo ${String:2:4} # 位置 3 (0-1-2), 4 个字符长
参数替换
- 处理和拓展变量
- ${parameter-default} 如果变量 parameter 没被声明,那么就使用默认值。
- ${parameter:-default} 如果变量 parameter 没被设置,那么就使用默认值。
- ${parameter=default} 如果变量parameter没声明,那么就把它的值设为default。
- ${parameter:=default} 如果变量parameter没设置,那么就把它的值设为default。
- ${parameter+alt_value} 如果变量parameter被声明了,那么就使用alt_value,否则就使用null字符串。
- ${parameter:+alt_value} 如果变量parameter被设置了,那么就使用alt_value,否则就使用null字符串。
- ${parameter?err_msg} 如果parameter已经被声明,那么就使用设置的值,否则打印err_msg错误消息。
- ${parameter:?err_msg} 如果parameter已经被设置,那么就使用设置的值,否则打印err_msg错误消息。
- 变量长度/子串删除
- \({#var} 字符串长度(变量\)var得字符个数)。对于array来说,${#array}表示的是数组中第一个元素的长度.
- ${var#Pattern}, \({var##Pattern} 从变量\)var的开头删除最短或最长匹配$Pattern的子串。 “#”表示匹配最短,“##”表示匹配最长
- ${var%Pattern}, \({var%%Pattern} 从变量\)var的结尾删除最短或最长匹配$Pattern的子串。 “%”表示匹配最短,“%%”表示匹配最长。
- 变量拓展/子串替代
- ${var:pos} 变量var从位置pos开始扩展, 也就是pos之前的字符都丢弃。
- ${var:pos:len} 变量var从位置pos开始,并扩展len个字符。
- ${var/Pattern/Replacement} 使用Replacement来替换变量var中第一个匹配Pattern的字符串。
- ${var//Pattern/Replacement} 全局替换。所有在变量var匹配Pattern的字符串,都会被替换为Replacement。
- ${var/#Pattern/Replacement} 如果变量var的前缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串。
- ${var/%Pattern/Replacement} 如果变量var的后缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串
- t=${var1#*-} 也一样,
- 因为#匹配最短的字符串,
- 同时*匹配任意前缀, 包括空字符串.
指定变量的类型
- declare/typeset选项
-r 只读
-i 整型
-a 数组
-f 函数
-x export
变量的间接引用
间接引用
- 假设一个变量的值是第二个变量的名字。如果a=letter_of_alphabet并且letter_of_alphabet=z, 它被称为间接引用。我们能够通过引用变量a来获得z,它使用eval var1=$\(var2这种不平常的形式。
- eval a=\$\)a传递一个间接引用给awk
多行的awk脚本的调用方法为: awk ' ..... '
awk脚本开始.
------------------------------------------------
awk "
{ total += \$${column_number} # 间接引用
}
END {
print total
}
" "$filename" ------------------------------------------------
awk脚本结束.
双圆括号结构
与let命令很相似,((...)) 结构允许算术扩展和赋值。 如,a=$(( 5 + 3 )),将把变量“a”设为“5 + 3”,或者8;(( a = 23 )) .
实验截图
3-1:


3-2:


3-2调试

3-3:


3-4:


3-5


3-6


高级bash脚本编程(三)的更多相关文章
- 高级Bash脚本编程指南(27):文本处理命令(三)
高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...
- 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese
<Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...
- 高级Bash脚本编程(二)
高级Bash脚本编程(二) 退出 退出状态码 退出:exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理. 每个命令都会返回一个退出状态码,成 ...
- 高级Bash脚本编程(一)
高级Bash脚本编程 Bash 它是能力很强的计算机语言,被称为解释性语言或脚本语言,它可以调用所有的UNIX命令和工具再加上公共程序. Bash中的特殊字符 注释(#) (除#!外,#!是用于指定当 ...
- advanced base-scripting guide in chinese(高级Bash脚本编程指南-10)
<高级Bash脚本编程指南>Revision 10中文版 github上链接地址: https://github.com/LinuxStory/Advanced-Bash-Scriptin ...
- 《Advanced Bash-Scripting Guide》 in Chinese 高级Bash脚本编程指南》Revision 10中文版
<Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...
- 脚本命令高级Bash脚本编程指南(31):数学计算命令
题记:写这篇博客要主是加深自己对脚本命令的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 高等Bash脚本编程指南(31):数学盘算命令 成于坚持,败于止步 操作数字 factor ...
- 实验楼-高级Bash脚本编程指南
实验1.Bash介绍与入门 1.简介:Bash是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝 ...
- 实验楼高级bash脚本编程指南 挑战:简单的热身
传送门:https://www.shiyanlou.com/courses/running# 步骤一 新建一个 test.sh 输出 Hello Shiyanlou! 步骤二 复制 test.sh 为 ...
随机推荐
- Delphi Live Bindings 初探
Delphi Live Bindings 初探 Live Bindings,顾名思义,动态绑定. 1.绑定前: 2.点击数据源: 3.绑定连线:点击 蓝色区域, 按住 鼠标左键,一直移动到绿色区域,然 ...
- Weinre 远程调试移动端手机web页面
调试场景 1.调试页面在手机上.2.调试工具在PC的chrome3.手机跟pc要在同一个网络环境下,也就是都使用一个wifi 一.安装 Weinre 1.Weinre是基于nodejs实现的,所以使用 ...
- SWT/JFace开发遇到org.eclipse.core.runtime.IProgressMonitor问题的解决办法(转载)
今日正在使用SWT和JFace开发一个系统,在搭建JFace平台时遇到了一个问题,运行HelloWorld程序抛出org.eclipse.core.runtime.IProgressMonitor的n ...
- 【BZOJ3678】wangxz与OJ Splay
[BZOJ3678]wangxz与OJ Description 某天,wangxz神犇来到了一个信息学在线评测系统(Online Judge).由于他是一位哲♂学的神犇,所以他不打算做题.他发现这些题 ...
- 【BZOJ3156】防御准备 斜率优化
[BZOJ3156]防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小 ...
- 【BZOJ1030】[JSOI2007]文本生成器 AC自动机+动态规划
[BZOJ1030][JSOI2007]文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文 ...
- go练习3 --map的操作
func T2_1() { // 键值string , 值 int 类型 m1 := map[string]int{} //添加一个元素 m1["str1&q ...
- 【gulp】前端自动化工具---gulp的使用(一)------【巷子】
什么是gulp? 基于node的自动化构建工具 扩展:开发的时候分为2个节点一个是开发阶段 另一个是部署阶段 开发阶段:源文件不会被压缩 部署阶段:所有文 ...
- tomcat的server.xml中的Context节配置
Tomcat的默认网站目录是:C:\Tomcat 9.0\webapps\ROOT,里面的index.jsp,就是tomcat官方提供的默认页,如果按照默认配置,访问链接应当是http://local ...
- Django权限系统auth模块详解
转自:原文出处 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系统. 在INSTALLED_A ...