bash之test表达式基础-2

简介: bash之test表达式基础-2

昨天我们看了一下test表达式: 数字比较字符串比较文件/权限比较,今天我们继续来看看test式子的案例,接着我们再来看看test表达式余下的部分: and/or/非文件内容比较 还有余下的 文件比较




test表达式基础


逻辑运算符

操作符 含义
-a and(&&)
-o or( )
! 非(!)


我们来尝试下

写一个脚本判断用户输入的字符是否是 y/Y


image.png


执行脚本

image.png


我们再来看下

来判断下,输入的数字是否是 大于0 并且 小于2

image.png


我们执行下看下

image.png


我们能否使用 &&||来写呢

是可以的,但是&&||不属于test表达式哦

我们可以将 [ 0 -lt $num -a 2 -gt $num ]改为[ 0 -lt $num ] && [ 2 -gt $num ]||同理,但是这便不算是 test表达式了哦



文件内容比较


操作符 含义
file1 -ef file2 判断2个文件是否指向同一个inode
file1 -nt file2 判断file1是否比file2新
file -ot file2 判断file1是否比file2旧


我们来看下-ef

image.png

我们接着上一个例子新建文件newfiles3

image.png

可以看到,newfilesnewfiles3比较,返回值为 false,证明newfiles不比newfiles3




test案例讲解


字符比较案例


输入Y/n继续操作或则退出操作


我们经常在系统中,或则是脚本中看到使用到 输入Y/n继续或则退出操作,我们使用test表达式模拟一下


其中有些是我们还未看到过的,这里补充下

read从终端输入值,并且赋值给operation,-p是输出提示信息至终端

while是循环语句,while(true) do ... done代表死循环,除非语句中有exit或则break

if elif else fi是判断语法

image.png


执行该脚本

image.png



数字比较案例


判断web程序是否正常

我们可以使用test表达式来判断web程序是否正常

我们使用curl -I可以获得web服务的响应头,例如

image.png


如下就是正常的,且该命令返回值为0,我们请求后,可以看有哪些返回值不为0的,不为0则为不正常

我们可以验证 [][[ ]]

其中 $?会返回上一个命令的返回值,0为成功,非0失败

image.png


执行脚本

image.png


文件类型判断


脚本加锁/解锁


我们在写脚本过程中,特别是一些依赖上一次运行结果的脚本,不允许同时运行,所以,我们在编写脚本过程中,可以让脚本输出一个“锁”,以便避免同时运行该脚本,我们在判断的时候,可以使用 -f来判断是否存在该锁文件。


我们可以编写例子

image.png



单独执行过程是这样的

image.png


当执行过程中又有脚本在运行时就会报错

image.png



心得


test表达式在整个脚本编写过程中,可谓是举足轻重,它最难的是语法,语法,还是语法,当test表达式改写为[]是,语法格式很重要,如下


image.png


一个字符也不要少,否则会出错,若test仅是数字、字符判断,那还不足为奇,更为难得的是,它还能够判断文件/权限的内容,这也将成为linux脚本利器,所以说,学好test表达式,等于入shell编程的小门了。


shell编程中,由于它是脚本语言,所以,在语法这块很轻松,但是它又直接调用系统命令,例如: rm,所以我们在编写过程中,一点要仔细点,最好在写每条语句的时候,都判断下,例如,在脚本中删除文件的时候,我们尽量先判断下是否存在该文件,如下脚本

这是一个比较极端的例子,当我们引用变量名出错的时候,为避免系统出错,我们使用echo输出命令


image.png


我们执行脚本

image.png


可以看到,如果我们直接去删除,那么执行的命令将会不可挽回的,而当我们删除前去判断一下,我们就可以避免该错误操作。


运维对自己“不自信”,其实也未必是坏事。





相关文章
|
运维 Shell Linux
bash 之 test 表达式基础
bash 之 test 表达式基础
10155 0
|
Shell 分布式数据库
|
Shell Windows 分布式数据库
bash if 表达式含义
[ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
610 0
|
5月前
|
监控 安全 Shell
防止员工泄密的措施:在Linux环境下使用Bash脚本实现日志监控
在Linux环境下,为防止员工泄密,本文提出使用Bash脚本进行日志监控。脚本会定期检查系统日志文件,搜索敏感关键词(如"password"、"confidential"、"secret"),并将匹配项记录到临时日志文件。当检测到可疑活动时,脚本通过curl自动将数据POST到公司内部网站进行分析处理,增强信息安全防护。
170 0
|
5月前
|
Linux Shell Windows
4:Bash shell命令-步入Linux的现代方法
4:Bash shell命令-步入Linux的现代方法
91 0
|
Ubuntu 安全 Linux
不用安装虚拟机,直接在Windows上面运行Linux Bash Shell,嗯!真香!!!
不用安装虚拟机,直接在Windows上面运行Linux Bash Shell,嗯!真香!!!
249 0
|
关系型数据库 MySQL Shell
【Linux命令】-bash: mysql: command not found
【Linux命令】-bash: mysql: command not found
130 0
|
5月前
|
存储 Shell Linux
Linux Bash 脚本中的 IFS 是什么?
【4月更文挑战第25天】
115 0
Linux Bash 脚本中的 IFS 是什么?
|
3月前
|
存储 Shell Linux
Linux|创建和使用 Bash 别名
Linux|创建和使用 Bash 别名
44 6
|
5月前
|
Java Shell Linux
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?