我正在尝试执行变量交换,其中用户输入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
}
答案 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