ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Shell】编程入门到精通保姆级教程:----test 命令

【Shell】编程入门到精通保姆级教程:----test 命令 一、【Shell】编程入门test命令详解 1.1、test命令简介test命令是 Shell 内置的条件判断工具用于评估表达式并返回布尔值真/假它通常与if语句结合使用是 Shell 脚本中实现逻辑控制的基础。Shell 中的test命令用于检查某个条件是否成立它可以进行数值、字符和文件三个方面的测试。语法格式test EXPRESSION或[ EXPRESSION ]# 注意方括号内必须有空格1.2、文件测试操作 test命令最常用于检查文件属性以下是常用文件测试选项操作符描述示例-e文件是否存在[ -e file.txt ]-f是普通文件[ -f /path/to/file ]-d是目录[ -d /path/to/dir ]-r可读[ -r file.txt ]-w可写[ -w file.txt ]-x可执行[ -x script.sh ]-s文件大小 0[ -s logfile ]-L是符号链接[ -L symlink ]示例脚本#!/bin/bashfile/etc/passwdif[-e$file];thenecho$file存在if[-r$file];thenecho并且可读fielseecho$file不存在fi输出结果为/etc/passwd 存在并且可读1.3、字符串比较 ✍️test提供了多种字符串比较方式操作符描述示例-z STRING字符串为空[ -z $var ]-n STRING字符串非空[ -n $var ]STRING1 STRING2字符串相等[ $var1 $var2 ]STRING1 ! STRING2字符串不等[ $var1 ! $var2 ]重要提示字符串变量应该总是用双引号括起来防止空变量导致语法错误。示例#!/bin/bashread-p输入用户名: usernameif[-z$username];thenecho错误用户名不能为空exit1elif[$usernameroot];thenecho警告不建议使用root账户elseecho欢迎,$usernamefi执行后我们在终端输入 zhuzhu输出结果类似如下输入用户名: zhuzhu欢迎, zhuzhu1.4、数值比较 对于数值比较test使用不同的操作符操作符描述示例-eq等于[ $a -eq $b ]-ne不等于[ $a -ne $b ]-gt大于[ $a -gt $b ]-ge大于或等于[ $a -ge $b ]-lt小于[ $a -lt $b ]-le小于或等于[ $a -le $b ]示例#!/bin/bashread-p输入年龄: ageif[$age-lt0];thenecho年龄不能为负数elif[$age-lt18];thenecho未成年人elif[$age-ge18][$age-lt60];thenecho成年人elseecho老年人fi执行后我们在终端输入 12输出结果类似如下输入年龄: 12未成年人1.5、逻辑操作符 test支持逻辑组合操作符描述示例!逻辑非[ ! -f $file ]-a逻辑与[ $a -eq 1 -a $b -eq 2 ]-o逻辑或[ $a -eq 1 -o $b -eq 2 ]现代推荐写法使用和||替代-a和-o更符合 POSIX 标准[$a-eq1][$b-eq2]# 与[$a-eq1]||[$b-eq2]# 或1.6、高级用法[[ ]]和(( ))⚡Bash 提供了更强大的测试语法双括号[[ ]]支持模式匹配[[ $var *.txt ]]支持正则表达式[[ $var ~ ^[0-9]$ ]]更安全的字符串处理算术比较(( ))专为数值比较设计(( a b ))支持更复杂的算术表达式示例if[[$file*.log]];thenecho这是日志文件fiif(($count10));thenecho数量超过10fi二、test命令实际应用示例 2.1、检查服务是否运行#!/bin/bashservicenginxifsystemctl is-active--quiet$service;thenecho$service正在运行elseecho$service未运行# 可以添加启动服务的命令fi2.2、备份文件检查#!/bin/bashbackup_file/backups/data_$(date%Y%m%d).tar.gzif[!-f$backup_file];thenecho错误备份文件$backup_file不存在exit1elif[!-s$backup_file];thenecho警告备份文件为空elseecho备份验证成功fi三、常见错误与调试技巧 ️3.1、高频错误点缺少空格[ $a$b ]是错误的正确是[ $a $b ]未引用的变量[ -f $file ]应该为[ -f $file ]混淆字符串和数值比较使用比较字符串-eq比较数值3.2、调试技巧在脚本开头添加set -x开启调试模式或使用echo打印测试表达式echo测试表达式: [$a-eq$b][$a-eq$b]echo成立||echo不成立
返回列表