最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

android - Shell script with if-else returns command not found error while executing the last line - Stack Overflow

programmeradmin0浏览0评论

I have a shell script to set the CPU frequency to maximum on all cores on Android devices. The contents are:

#!/system/bin/sh
cpucores=`grep -c ^processor/proc/cpuinfo`
cpusint=`echo $((cpucores-1))`
littlefreq=`cat /sys/devices/system/cpu/cpu$cpusint/cpufreq/scaling_max_freq`
bigfreq=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq`
cpuhalf=$((cpucores/2))
cpuhalfint=`echo $((cpufalf-1))`
if [$bigfreq  -ne $littlefreq]; then
        for i in `seq 0 $cpuhalfint`; do
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            echo "performance" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
            echo $bigfreq > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
        done
        for x in `seq $cpuhalfint $cpusint`; do
            chmod 0644 /sys/devices/system/cpu/cpu$x/cpufreq/scaling_governor
            echo "performance" > /sys/devices/system/cpu/cpu$x/cpufreq/scaling_governor
            chmod 0644 /sys/devices/system/cpu/cpu$x/cpufreq/scaling_min_freq
            echo $littlefreq > /sys/devices/system/cpu/cpu$x/cpufreq/scaling_min_freq
        done
else
        for i in `seq 0 $cpusint`; do
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            echo "performance" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
            echo $bigfreq > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
        done
fi

The script works fine, but it returns this:

./setcpu.sh[28]: [1248000: not found

(1248000 is my CPU frequency, and setcpu.sh is the name of the shell script file)

Whereas it shouldn't output ANYTHING at all. Does someone know why this is happening?

Thanks for answering.

I have a shell script to set the CPU frequency to maximum on all cores on Android devices. The contents are:

#!/system/bin/sh
cpucores=`grep -c ^processor/proc/cpuinfo`
cpusint=`echo $((cpucores-1))`
littlefreq=`cat /sys/devices/system/cpu/cpu$cpusint/cpufreq/scaling_max_freq`
bigfreq=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq`
cpuhalf=$((cpucores/2))
cpuhalfint=`echo $((cpufalf-1))`
if [$bigfreq  -ne $littlefreq]; then
        for i in `seq 0 $cpuhalfint`; do
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            echo "performance" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
            echo $bigfreq > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
        done
        for x in `seq $cpuhalfint $cpusint`; do
            chmod 0644 /sys/devices/system/cpu/cpu$x/cpufreq/scaling_governor
            echo "performance" > /sys/devices/system/cpu/cpu$x/cpufreq/scaling_governor
            chmod 0644 /sys/devices/system/cpu/cpu$x/cpufreq/scaling_min_freq
            echo $littlefreq > /sys/devices/system/cpu/cpu$x/cpufreq/scaling_min_freq
        done
else
        for i in `seq 0 $cpusint`; do
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            echo "performance" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
            chmod 0644 /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
            echo $bigfreq > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq
        done
fi

The script works fine, but it returns this:

./setcpu.sh[28]: [1248000: not found

(1248000 is my CPU frequency, and setcpu.sh is the name of the shell script file)

Whereas it shouldn't output ANYTHING at all. Does someone know why this is happening?

Thanks for answering.

Share Improve this question edited Mar 2 at 15:33 IsHacker asked Mar 2 at 14:08 IsHackerIsHacker 258 bronze badges 3
  • 1 if [$bigfreq -ne $littlefreq]; is wrong, it should be if [ $bigfreq -ne $littlefreq ]; – oguz ismail Commented Mar 2 at 14:54
  • 1 Thanks, it worked. I really thought identation wouldn't be a problem. I will write an answer. – IsHacker Commented Mar 2 at 15:34
  • If your shell supports $((cpucores-1)) then it should also support cpusint=$(echo $((cpucores-1)) ) (stop using back-tics (-;!). Any place where you are using back-tics cmd-substitution, you can join the late 1980s and use $( cmd ) for cmd-substituion. Better because you can nest them as much as you want without having to escape anything (nested backtics need to be escaped for each level of nesting). Learn to check your code at shellcheck.. Be sure to include #!/bin/sh (or whatever) as the first line. Good luck. – shellter Commented Mar 3 at 20:45
Add a comment  | 

1 Answer 1

Reset to default 1

[ is an alias for test. It's a command name, so it must be separated from its arguments just like test or echo needs.

] must also be provided as an entire argument.

Therefore,

if [$bigfreq  -ne $littlefreq]

needs to be replaced with

if [ $bigfreq  -ne $littlefreq ]

Thanks to @oguz ismail.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论