当前位置: 首页 > article >正文

高性能linux服务器运维实战 shell应用案例

正则表达式与变量

正则表达式

正则表达式由普通字符和元字符组成

匹配规则网上可搜索,写几个自己用到的

.* 匹配任意多字符

\{n\} 匹配字符出现n次

\{n, \} 匹配字符至少出现n次

\{n, m\} 匹配字符出现n到m次之间

^$ 分别匹配字符开头和结尾

[] 字符集合, 即匹配括号内列出所有字符的任意一个字符的单字符

[^a-z] 匹配非a-z字符的任意一个字符

\<\> 匹配完整单词 思考案例iivery

变量

一般变量

赋值 a=123 或 a=`echo 123`

变量使用 $a 或 ${a}

删除变量 unset a

只读变量

参数变量

$@ $* 都表示传递给脚本或函数的所有参数。当被引号包含时,比如"$@" "$*",$@会将各个参数分开,以$1, $2...形式输出所有参数,$*会将所有参数作为一个整体输出参数

$0 表示命令行上shell程序名

$# 表示命令行上参数数量

$? 上一条命令执行完成的返回值

$$ 当前进程的进程号

$! 运行在后台最后一个作业的pid

$_ 在此之前执行命令或脚本的最后一个参数

IFS 是空白符变量

推荐使用$@而不是$*,因为$@的分隔符是空格,而$*的分隔符是IFS,如果改了IFS,$*的结果也会被动改变

使用第x个参数,可以${5}

可用$?获取上一个命令执行结果 0表示成功 1表示失败 126表示命令或脚本没有执行权限 127表示命令没找到

命令替换

read

变量测试 截取与替换

变量测试

${var:?word} 若var不存在则输出word并终止脚本

${var:+word} 若var存在则值为word,若var不存在返回空值 var不变

字符串长度与截取

${#var} 表示变量长度

${var:n} 输出字符串第n个字符以后的内容

${var:n:len} 输出变量第n个字符后长度为len的内容

${var#word} 删除var开头内容为word后输出剩下内容

${var%word} 删除var结尾内容为word的内容输出剩下内容

${var/old/new} 替换var中第一个出现的old为new

${var//old/new} 替换var中所有old为new

${var/#old/new} 替换var中开头的old为new,如果开头不为old则不替换

${var/%old/new} 替换var中结尾的old为new,类似/#

变量间接引用

注意用了eval和两个$间接引用

同时输出多行

两种方法 一个是双引号直接换行 一个是输入重定向 命令从echo改用cat

运算符 测试操作符 if语句

算数运算符

每种不同运算都会有不同的返回值

算数运算扩展

算是运算语句需如下格式 $[expression] $((expression))

也可以把赋值直接写道两个小括号

运算内部可以不加美元符号

还支持自加自减运算

小结 区分${} $() $[] $(())

${}是变量使用 $()是命令替换(`` 和 $()) 最后后两个是算术运算

算数运算指令expr

注意expr数字和运算符之间一定要有空格不然报错

算数运算指令let

let和expr不同,expr数字和运算符之间一定要有空格,let则一定不能由空格,如果非要有,将整个表达式用双引号括起来

自增减运算

即x++ ++x 自增运算只能是变量,不能是常数等

条件测试

条件测试

即通过$?看语句执行结果 0是ok非0是error

test与条件测试语句

测试语句格式如下

1 test<expression>

2 [ expression ]

3 [[ expression ]] (bash2.0以上版本)

1和2等价 3是2的扩展,比如逻辑运算符可以在3中使用但不能在2中使用,而且2无法正则表达,但3可以正则表达

需注意的是 2 和 3方括号两边都要有空格

例子

test expression

[ expression ]

方括号测试表达式

[[基本等价[,但实际扩展了[,比如正则和逻辑运算符等,可以将[[看作[和expr的相加

如果单括号用正则会返回1

字符串测试操作符

[ -z str ] 字符串长度为0返回真

[ -n str ] 字符串长度不为0返回真

[ str ] 字符串不为空 返回真

[ str1 = str2 ] 判断字符串相等,=也可以用==代替

[ str1 != str2 ] 判断字符串不相等,不能用!==代替!=

[[ str1 == str2 ]] 同上两个

[[ str1 =~ str2 ]] str2是str1的子字符串为真

对于条件判断的字符串,可以加上双引号防止字符串有空白字符比如空格等

较好的一个方法是形如[ "${x}" == "${y}"]

检查字符是否为空

判断字符串是否非空

逻辑测试操作符

逻辑测试操作符: -a 表示and -o 表示or !表示非

匹配模式的逻辑测试操作符: && || ! 注意 匹配模式的逻辑测试操作符只能用在[[而不能用在[中

整数测试操作符

-eq -ne -gt -ge -lt -le 这些可用于单双方括号

==  != > >= < <=这些只能用于双小括号,注意双小括号两边的空格可以省略。这些也可以用在[ 和 [[中,但必须要加转义,否则可能报错

注意 双小括号用在方括号是否转义取决于bash实际版本 用的时候再搜搜 现在执行结果与资料不一致

文件测试操作符

-f 文件存在且为普通文件 返回真

-L 文件存在且为链接文件 真

-d 存在且为一个目录 真

-e 存在 真

-s 存在且大小大于0 真

-r 存在且可读 真

-w 存在且可写 真

-x 存在且可执行 真

条件测试举例

可以将&& 和||连用组成三目运算

if else语句

if 结构为 if ... elif ... elif ... else ... fi

注意如果要空语句则需要使用冒号: 类似于python的pass

case for 结构化命令

case语句

case类似高级语言的switch case,注意以下点

1 case 一旦匹配到,不会直接退出而是顺序执行匹配的后续每一个匹配模式

2 如果没匹配到,则执行*)后面的语句,可以不出现

3 每一个匹配模式最后必须要有一个双分号

for语句与结构化命令

列表for循环

 循环的列表项以空格分割,可以省略in list,省略后的含义是$@

for x in * *表示当前目录下所偶文件名

使用命令执行结果作为循环的内容

数值类型的使用,类似py的range,有$(seq 10) {1..10..2}

break continue

和py类似,break 和continue后面可以跟一个数字,表示退出第几重循环

for语句 c语言型

while循环 util循环 select循环

while语句

while读文件

util语句

util语法格式和while一样,区别是until是为假继续执行,为真退出执行

select语句

可用于制作菜单 PS3是提示信息的环境变量

select也可以使用选择的数字进行判断,数字需要使用变量REPLY

函数

alias命令用来起别名

格式如下

function abc { echo 666 } 或

abc () {echo 666 }

调用函数 直接执行函数名即可

函数存储

两种情况 函数在一个脚本中,调用前要先定义;;函数不再一个脚本,调用前要先source 函数所在脚本名

函数显示

可用declare -F / -f / -f 函数名显示函数具体定义

unset -f可以从内存删除指定函数

export -f可将函数输出给shell

函数变量与返回值

如何调用函数入参: $1 $2 ${n} $@ $* 这样使用参数,定义函数时可以不写形参名称

$0始终代表脚本名称

函数内变量是全局作用域,如果使用local声明的变量,则是函数作用域

函数的返回

函数执行完默认返回 也可以用return n或exit n显式返回

注意函数返回值范围只能在0-256,超过范围会导致异常

函数和主程序不再一个脚本中的情况

shell案例汇总

查看进程状态

批量创建用户

随机密码可以这么弄


http://www.kler.cn/a/397745.html

相关文章:

  • ISP是什么?
  • Redis实战案例(黑马点评)
  • Git_2024/11/16
  • 类和对象——拷贝构造函数,赋值运算符重载(C++)
  • 大数据实验9:Spark安装和编程实践
  • 贴代码框架PasteForm特性介绍之markdown和richtext
  • C# yolo10使用onnx推理
  • SpringBoot整合Email 邮件发送详解
  • Java基础——多线程
  • SOP搭建:企业标准化操作程序构建与实施指南
  • 用com.github.shyiko.mysql.binlog 写一个监听mysql的binlog 的程序
  • 【代码随想录day32】【C++复健】509. 斐波那契数;70. 爬楼梯;746. 使用最小花费爬楼梯
  • Java-01 深入浅出 MyBatis - MyBatis 概念 ORM映射关系 常见ORM 详细发展历史
  • [刷题]入门1.矩阵转置
  • 单片机_day7_中断
  • 【Webpack实用指南】如何拆分CSS资源(2)
  • 说说软件工程中的“协程”
  • FFMPEG录像推流时遇到的问题
  • 【ArcGIS微课1000例】0128:ArcGIS制作规划图卫星影像地图虚化效果
  • 2024山西省网络建设运维第十八届职业院校技能大赛解析答案(2. DNS 服务)
  • C++(Qt)软件调试---无法校验pdb时间戳(23)
  • Ubuntu从入门到精通(一)系统安装
  • 使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan
  • css-50 Projects in 50 Days(3)
  • 屏幕拾色器
  • GESP4级考试语法知识(贪心算法(四))