Linux Bash - 比较if语句中的两个变量

时间:2015-08-24 06:53:01

标签: linux bash

我正在尝试执行变量交换,其中用户输入2个不同的数字并执行检查以确保第二个数字“end”大于第一个数字“start”。如果起始编号大于结束编号,它将执行交换,以便后面的计算可以工作。

我得到的错误是: ./Boot.sh:第94行:[:-ne:一元运算符预期

                    if [ $end -gt $start ]
                        then
                            start=$swapper
                            end=$start
                            swapper=$end
                    fi

这是完整的代码,因为我似乎在评论中犯了一些错误,我刚试过双括号,但仍然有同样的错误。

                    {
counter=0
while :
    do
        if [ $counter -gt '0' ]     
            then
                printf "\nWould you like to continue terminating processes?\n"
                echo "Type 1 to contiue or 0 to exit"
                read endProgram
            if [ $endProgram -ne '1' ]
                then
                    break
            fi
        fi      
        echo "Welcome to Max process killer"
        while :
            do
                echo "Enter the first number of the process range"
                read start
                echo "Enter the last number of the process range"
                read end
                if [ $start -le '3' -o $end -le '3' ]
                    then
                        echo "Your first and last pid IDs must be geater then 3"
                        read -n 1
                        break
                    if [[ $end -gt $start ]]
                        then
                            start=$swapper
                            end=$start
                            swapper=$end
                    fi
                fi
                printf "\nAre you sure you would like to terminate these processes?\n"
                echo "Enter 1 to confirm or 0 to cancel"
                read confirm
                if [ $read -ne '1' ]
                    then
                        break
                fi
                while [ $start -le $end ]
                    do
                        kill -9 "$start"
                        echo "Process ID:"$start "has been terminated" 
                        start=$(( $start + 1 ))
                done
                break
        done
        counter=$(($counter + 1))
done
                    }

2 个答案:

答案 0 :(得分:1)

您的代码:

read confirm
if [ $read -ne '1' ]

您读取变量confirm的输入而不是变量read。变量read为空,您收到错误:

./Boot.sh: line 94: [: -ne: unary operator expected

提示:使用默认值(例如0)来避免空变量:

if [ "${confirm:-0}" -ne '1' ]

来自man bash:

  

${parameter:-word}:使用默认值。如果参数未设置或为null,则替换单词的扩展。否则,参数的值将被替换。

     

${parameter:=word}:分配默认值。如果参数未设置或为null,则将字的扩展分配给参数。然后替换参数的值。不能以这种方式分配位置参数和特殊参数。

答案 1 :(得分:0)

尝试使用双括号。它们通常更安全。这是[[]][]的比较wiki page

if [[ $end -gt $start ]]
then
    swapper=$start
    start=$end
    end=$swapper
fi