shell中test命令参数详解

本文详细介绍了Linux下test命令的使用方法,包括文件类型判断、权限测试、文件比较、整数判断及字符串判断,同时提供了丰富的示例命令,帮助读者深入理解并掌握test命令的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料 《鸟哥的linux私房菜-基础篇》
test命令一般用来测试一个文件是否存在或者是否有某个权限,以及两个对象的比较等等

文件类型判断

	示例命令 test -e filename
  		-e :该文件是否存在
  		-f :该文件是否存在且是file类型
  		-d : 该文件是否存在且为目录
  		-b:该文件是否存在且为block device装置
  		-c:该文件是否存在且为character device装置
  		-S:该文件是否存在且为Socket文件
  		-p:该文件是否存在且为pipe文件
  		-L:该文件是否存在且为连接档

文件权限测试

	示例命令 test -r filename
	-r:该文件是存在且具有可读属性
	-w:该文件是否存在且具有可写属性
	-x:该文件是否存在且具有可执行权限
	-u:该文件是否存在且具有SUID
	-g:该文件是否存在且具有SGID
	-k:该文件是否存在且Sticky bit属性
	-s:该文件是否存在且为非空白文件

两文件之间的比较

	示例命令 test  file1 -nt file2
	-nt:(newer than)file1是否比file2新
	-ot: (older than)file1是否比file2旧
	-ef:判断file1与file2是否为同一文件

两整数间的判断

	示例命令 test n1 -eq n2
	-eq :两整数是否相等   equal
	-ne: 两整数不相等    not equal
	-gt:  n1是否比n2大    great than
	 -lt:  n1是否比n小       less than
	 -ge:n1是否大于等于n2 greater than or equal
	 -le:n1是否小于等于n2   less than or equal

判断字符串

	示例命令  test -z string  
	-z:判断字符串是否为0.若为空字符串,返回true,否则返回false
	-n:判断字符串是否非为0。若为空字符串,则返回false,否则返回false
	另外 判断两个字符串是否相等或不等,还可以用 == 或 != 判断,和其他语言一样

多重条件判断

	-a  作用就是and 如 test -r file -a -x file 只有当file有读,可执行权限才返回true
	-o	  作用就是or  如 test -r file -o -x file 当file有读,可执行权限,只要有一个满足就返回true
	!反状态	如 test ! -r file 当file没有可读权限时返回true
``` @echo off :begin echo ***************************************************************************** echo ** ** echo ** 注意:请将设备【WiFi打开】【蓝牙关闭】,写号前将设备通过USB连接至电脑 ** echo ** 注意:请按照蓝牙Mac地址在前,WiFi Mac地址在后的顺序录入 ** echo ** ** echo ***************************************************************************** echo. :: set /p arr=请顺序输入蓝牙Mac地址和WiFi Mac地址,以空格隔开: :: for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12 delims= " %%a in ("%arr%") do ( :: set num1=%%a :: set num2=%%b :: set num3=%%c :: set num4=%%d :: set num5=%%e :: set num6=%%f :: set num7=%%g :: set num8=%%h :: set num9=%%i :: set num10=%%j :: set num11=%%k :: set num12=%%l :: ) :: 此方案不需要工厂标签二维码有特殊格式,顺序输入即可。eg:112233445566aabbccddeeff set /p arr=请顺序输入蓝牙Mac地址和WiFi Mac地址: set num1=%arr:~0,2% set num2=%arr:~2,2% set num3=%arr:~4,2% set num4=%arr:~6,2% set num5=%arr:~8,2% set num6=%arr:~10,2% set num7=%arr:~12,2% set num8=%arr:~14,2% set num9=%arr:~16,2% set num10=%arr:~18,2% set num11=%arr:~20,2% set num12=%arr:~22,2% echo adb root adb root :: 打开WiFi、关闭BT adb shell svc wifi enable adb shell svc bluetooth disable :: 预留开关响应时间2s timeout /t 2 /nobreak >nul echo ***************************************************************************** echo ** ** echo ** 开始写入蓝牙地址 : %num1% %num2% %num3% %num4% %num5% %num6% ** echo ** ** echo ***************************************************************************** adb shell wifitest -O adb shell wifitest -E 0x138 adb shell wifitest -e 0x138 -v 0x67 adb shell wifitest -e 0x139 -v %num1% adb shell wifitest -e 0x13A -v %num2% adb shell wifitest -e 0x13B -v %num3% adb shell wifitest -e 0x13C -v %num4% adb shell wifitest -e 0x13D -v %num5% adb shell wifitest -e 0x13E -v %num6% :: boots 方案回显有较多的fail,影响产线判断先不用,待产线测试wifitest的稳定性再决定是否启用 :: 目前遇到的问题是单独操作boots可以写成功,但是放在bat顺序执行会概率性执行不下去。 :: adb shell boots -c efuse -r -a 0x138 :: adb shell boots -c efuse -w -a 0x138 -v 0x67 :: adb shell boots -c efuse -w -a 0x139 -v %num1% >nul :: adb shell boots -c efuse -w -a 0x13A -v %num2% >nul :: adb shell boots -c efuse -w -a 0x13B -v %num3% >nul :: adb shell boots -c efuse -w -a 0x13C -v %num4% >nul :: adb shell boots -c efuse -w -a 0x13D -v %num5% >nul :: adb shell boots -c efuse -w -a 0x13E -v %num6% >nul echo ***************************************************************************** echo ** ** echo ** 开始写入WiFi地址 : %num7% %num8% %num9% %num10% %num11% %num12% ** echo ** ** echo ***************************************************************************** :: adb shell wifitest -O adb shell wifitest -e 4 -v %num7% adb shell wifitest -e 5 -v %num8% adb shell wifitest -e 6 -v %num9% adb shell wifitest -e 7 -v %num10% adb shell wifitest -e 8 -v %num11% adb shell wifitest -e 9 -v %num12% echo 设备重启 adb reboot pause goto begin :: adb shell wifitest -e 4 -v 0xec :: adb shell wifitest -e 5 -v 0x20 :: adb shell wifitest -e 6 -v 0x14 :: adb shell wifitest -e 7 -v 0x05 :: adb shell wifitest -e 8 -v 0x11 :: adb shell wifitest -e 9 -v 0x17 :: goto begin```优化后的代码需要再改进下,输入部分的字符需要转成十六进制的字符格式
最新发布
03-20
以下是改进后的脚本代码,其中输入的蓝牙Mac地址和WiFi Mac地址会被自动转换为十六进制格式,并用于后续写入操作: ### 改进版代码 ```batch @echo off :begin echo ***************************************************************************** echo ** ** echo ** 注意:请将设备【WiFi打开】【蓝牙关闭】,写号前将设备通过USB连接至电脑 ** echo ** 注意:请按照蓝牙Mac地址在前,WiFi Mac地址在后的顺序录入 ** echo ** ** echo ***************************************************************************** echo. :: 提示用户输入蓝牙Mac地址和WiFi Mac地址 set /p arr=请顺序输入蓝牙Mac地址和WiFi Mac地址 (例如:112233445566aabbccddeeff): :: 检查输入长度是否正确 if not "%arr%"=="" if not "%arr:~23,1%"=="" ( echo 输入错误!请输入正确的12位蓝牙Mac地址+12位WiFi Mac地址组合。 pause goto begin ) :: 将字符串拆分为每两位一组并转化为十六进制格式 for /L %%i in (0,2,22) do ( set "hexValue=!arr:~%%i,2!" call :ConvertToHex !hexValue! convertedArr[%%i] ) :: 输出转化结果以便调试 echo 转换完成的值如下: echo Bluetooth MAC Address: %convertedArr[0]% %convertedArr[2]% %convertedArr[4]% %convertedArr[6]% %convertedArr[8]% %convertedArr[10]% echo WiFi MAC Address: %convertedArr[12]% %convertedArr[14]% %convertedArr[16]% %convertedArr[18]% %convertedArr[20]% %convertedArr[22]% :: ADB命令部分 adb root adb shell svc wifi enable adb shell svc bluetooth disable timeout /t 2 /nobreak >nul :: 写入蓝牙MAC地址 echo ***************************************************************************** echo ** ** echo ** 开始写入蓝牙地址 : %convertedArr[0]% %convertedArr[2]% %convertedArr[4]% %convertedArr[6]% %convertedArr[8]% %convertedArr[10]% ** echo ** ** echo ***************************************************************************** adb shell wifitest -O adb shell wifitest -E 0x138 adb shell wifitest -e 0x138 -v 0x67 adb shell wifitest -e 0x139 -v %convertedArr[0]% adb shell wifitest -e 0x13A -v %convertedArr[2]% adb shell wifitest -e 0x13B -v %convertedArr[4]% adb shell wifitest -e 0x13C -v %convertedArr[6]% adb shell wifitest -e 0x13D -v %convertedArr[8]% adb shell wifitest -e 0x13E -v %convertedArr[10]% :: 写入WiFi MAC地址 echo ***************************************************************************** echo ** ** echo ** 开始写入WiFi地址 : %convertedArr[12]% %convertedArr[14]% %convertedArr[16]% %convertedArr[18]% %convertedArr[20]% %convertedArr[22]% ** echo ** ** echo ***************************************************************************** adb shell wifitest -e 4 -v %convertedArr[12]% adb shell wifitest -e 5 -v %convertedArr[14]% adb shell wifitest -e 6 -v %convertedArr[16]% adb shell wifitest -e 7 -v %convertedArr[18]% adb shell wifitest -e 8 -v %convertedArr[20]% adb shell wifitest -e 9 -v %convertedArr[22]% :: 重启设备 echo 设备重启... adb reboot pause goto begin :: 子程序:将十进制或普通十六进制字符转为标准十六进制格式 :ConvertToHex setlocal enabledelayedexpansion set input=%1 set output=0x%input% endlocal & set %2=%output% exit /b ``` --- ### 主要改动点说明 1. **增加校验机制** 确保用户输入了完整的24位有效字符(12位蓝牙 + 12位WiFi),避免无效输入导致脚本出错。 2. **添加字符转换功能** 使用`ConvertToHex`函数将用户输入的部分直接转为带“0x”前缀的标准十六进制格式。 3. **增强可读性和维护性** 利用数组变量存储转换后的每个字段值,并逐一赋给ADB指令参数,简化了逻辑结构。 4. **保持原有流程不变** 原来的功能性保留完整,仅针对输入环节进行了优化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值