运维中经常编写脚本时,如果遇到使用变量间歇取值并和整数进行比较时,大多数人第一时间会想到使用"-eq"进行比较,但事实中如果因特殊原因导致变量取值为空(null)时,bash shell会把null转换为0进行"-eq"比较,如果遇到此种困惑,可以把整数比较方法改为使用字符串比较(==),这样就可以很好的解决整数比较带来的这种bug。 为什么会有此文章,正是因为笔者在线上使用脚本运维的过程中,因此bug出现过两次失手,也给公司带来了带来了一些损失,经过仔细分析程序日志和脚本运行逻辑,加上如下测试过程,才真正找到了bug的所在以及解决办法。以下是笔者推敲思路,供大家分析之用。
相信正在脚本之路上狂奔的同学们,都能感觉到脚本中需要应用变量的地方非常广泛,简单来看变量也只不过就是:var=value;如果我们深入其中,也能发现变量里面的学问其实也挺深的,今天就给大家分享一下这个小小的变量里面到底有多少的学问吧。Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令用于指定变量的类型,两个命令是完全等价的。
数组与变量的区别 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组=数组名+索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持 bash的数组支持稀疏格式(索引不连续)
做为一个经常写脚本的运维人员来讲,都能发现一个问题,很多时候我们在不同的脚本里面重复的写着同一段代码。比如我们要去使用正则表达式去判断IP地址的合法性问题,如果每次都去写一遍这个匹配IP的表达式,整个表达式写下来老长老长的,0-9的数字组合看的眼都花了,是不是很累了。当然有人会说了,保存一份正确的代码之后,需要用这段代码的时候,直接粘贴到正在编写的脚本里面不就行了嘛!是没错,但这样是不是很多脚本里面都重复存放着同一段代码,额外增加了脚本的代码量。有没有一个两全其美的办法,让我们的脚本代码量又小,又省去了每次重复的粘贴同一段代码的操作,同时还能完美的调用这段代码了。shell函数的出现为我们完美的解决了这一设想。
continue与break常用于while、until、select循环语句中,指定条件下退出本轮循环或者所有循环,需要我们用实例去验证运行结果,就好理解了。但凭看文字介绍确实不怎么好理解。
select无限循环 主要用于创建菜单,按数字顺序排列的菜单项将显示在标准输出上,并显示 PS3示符,等待用户输入用户输入菜单列表中的某个数字,执行相应的命令, 用户输入被保存在内置变量 REPLY 中 select经常和case联合使用与for循环类似,可以省略 in list,此时使用位置变量 select是个无限循环,要想退出必须手动指定退出条件,一般会case中指定退出条件
until循环 使用于命题为假时执行循环的环境 命题为假时进入循环;命题为真时退出循环 或者说是条件不满足时就进入循环的的场景 从逻辑判断上讲,until和while刚好相反
while循环 适用于命题为真时执行循环的环境 命题为真时进入循环;命题为假时退出循环 或者说是条件满足时就进入循环的场景
学习脚本就是为了方便我们运维工作,而对运维人员从来讲,有很多工作也是需要重复执行的,比如我们管理用户帐户时就需要批量创建和删除用户帐户。而此时如果使用系统自带的useradd或者userdel去操作的话,就只能机械式的一个一个创建,一个一个的删除。那我们是不是就可以考虑写一个程序,让它自动化的去创建了。此时,我们的循环执行概念也就出来了。循环就是让程序按照一定的条件反复的执行相关操作,直到不在满足循环条件时结束。
做为运维人员,经常使用linux的都知道,在linux下面,很多命令、关键字,看起来长的很像,但实际应用起来就能够发现有时候还是有区别的,当然不仔细的人或许你是永远也不会明白,到底什么时候该使什么招。今天做为菜鸟的我,就给大家简单的分享几个,不全之处,希望大家留言指出,本博主随时更新,以方便大家紧急查阅。 菜鸟的发现: 一、$var_name与"$var_name" 二、"$*"与"$@" 三、[ ]与[[ ]]
天我为大家分享的是关于如何用case语句去写一些选择执行的脚本。case语句主要合适应用于一些选择条件比较复杂的脚本中,如果我们用if多分支语句也能写出来,但是显的太哆嗦,此时我们的最佳选择就就是case语句。
if单分支语句,if双分支语句,if多分支语句,示例及其详细执行过程
条件测试类型: 1,整数测试 2,字符测试 3,文件测试 组合测试条件
今天给大家展示一下,我自己写的一个自动创建Bash脚本文件头的脚本(名为create),希望能对初学脚本者带来一定的思维提示。毕竟对于一个经常写脚本的运维人员来说,每次写脚本的时候都需要重复的去写一遍文件头,也是一件很累赘的事情,既然我们学了脚本,为什么不让它来为我们减轻一下负担了。所以一个自动创建Bash脚本文件头的想法在我脑海里面产生了。 本脚本所需要实现的功能: 1,能够自动创建一个标准的Bash脚本文件头,带有详细注释信息 2,能够给新建完成的Bash脚本文件自动添加执行权限
Shell脚本编程基础,编程语言的分类,Shell脚本编程定义,shell脚本的用途,shell脚本文件头,shell变量类型,shell交互输入,bash中的算术运算,bash中的逻辑运算
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号