Android Kernel Adiutor自定义开关Shell脚本文件读取判断问题
解决Kernel Adiutor自定义开关控件的状态判断问题
我帮你分析下脚本里的几个关键错误,这些问题直接导致了开关状态判断异常:
原脚本的核心问题
变量赋值语法错误
你写的var= $(<sys/class/lcd/panel/mdnie/hdr)有两个致命问题:- Shell变量赋值时
=前后不能有空格,空格会让Shell把后面的$(<...)当成独立命令执行,最终var被赋值为空; - 文件路径开头缺少
/,变成了相对路径,Shell根本找不到目标文件,读取结果自然为空。
- Shell变量赋值时
if条件判断语法错误
Shell里的条件判断不能用( "$var" = 0)这种写法,正确的格式是用方括号[ ]或者双方括号[[ ]],同时字符串比较时最好给值加引号,避免空值引发的语法报错。未处理文件中的换行符
从/sys目录下的文件读取内容时,往往会自带换行符,比如实际读取到的是0\n而不是纯0,直接判断会因为隐藏的换行符导致匹配失败。
修正后的脚本
#!/system/bin/sh # 读取文件内容并去掉换行符,确保值纯净 var=$(tr -d '\n' < /sys/class/lcd/panel/mdnie/hdr) # 标准的Shell条件判断格式 if [ "$var" = "0" ]; then echo 0 else echo 1 fi
额外说明
- 用
tr -d '\n'可以彻底去掉内容里的换行符,避免因为隐藏字符导致判断失误; - 如果你习惯用
cat命令,也可以写成var=$(cat /sys/class/lcd/panel/mdnie/hdr | tr -d '\n'),效果完全一致; - 在你确认已获取su权限、文件权限正常的前提下,这个脚本应该能正确返回对应状态:文件内容为0时输出0,为1时输出1。
内容的提问来源于stack exchange,提问作者kotn3l
相关产品推荐
相关产品推荐

