这是我的代码:
#!/bin/basha=$(acpitool -a)echo "$a"if $a -eq "AC adapter : online"thenecho "ONliNE"elseecho "OFFliNE"fi
它不起作用;变量$a ia与字符串“AC adapter:online”无法比较.如何将命令acpitool -a的输出转换为字符串?
这是发生的事情:
AC adapter : online ./acpower.sh: linha 7: AC: comando não enconTradoOFFliNE
问题解决了!
这是新代码,在大家的帮助下,谢谢.
#!/bin/bash# set the variablea=$(acpitool -a)# remove white spacesa=${a// /}# echo for testecho $a# compare the resultif [[ "$a" == 'ACadapter:online' ]]then# then that the imagination is the limitecho "ONliNE"else# else if you have no imagination you're lostecho "OFFliNE"fi
此代码可以在服务器上使用,以在电源出现故障时发出警报!
解决方法 如何解决问题shell(或测试命令)使用=表示字符串相等,使用-eq表示数字相等.某些版本的shell支持==作为=的同义词(但是=由POSIX test
命令定义).相比之下,Perl使用==表示数字相等,eq表示字符串相等.
您还需要使用以下测试命令之一:
if [ "$a" = "AC adapter : online" ]then echo "ONliNE"else echo "OFFliNE"fi
要么:
if [[ "$a" = "AC adapter : online" ]]then echo "ONliNE"else echo "OFFliNE"fi
使用[[运算符,您可以将引号放在“$a”附近.
为什么你收到错误信息
你写的时候:
if $a -eq "AC adapter : online"
shell将其扩展为:
if AC adapter : online -eq "AC adapter : online"
这是一个执行命令AC的请求,显示5个参数,并将命令的退出状态与0进行比较(考虑0 – 成功 – 为真,任何非零为假).显然,您的系统上没有名为AC的命令(这并不奇怪).
这意味着你可以写:
if grep -q -e 'some.complex*pattern' $filesthen echo The pattern was found in some of the fileselse echo The pattern was not found in any of the filesfi
如果要测试字符串,则必须使用test命令或[[…]]运算符. test命令与[命令相同,但命令名称为[,最后一个参数必须为]时除外).
总结以上是内存溢出为你收集整理的linux – 将输出转换为字符串全部内容,希望文章能够帮你解决linux – 将输出转换为字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)