我在C ++中做了很少的编程,我并不真正理解如何在Knoppix OS上的KornShell(ksh)中使用代码。教授给我们的资源很少,所以很难解决。我们上课的两本教科书主要讨论UNIX版本中的命令,但与ksh没什么关系。
编写一个shell脚本,它只接受一个必须是正整数的参数。 (我的第二个有两个)
Ksh代码:
NUMBER=$1
read -p NUMBER
# Test that one argument was input.
if [[ $# -ne 1 ]];then
echo "Please enter an integer as an argument"
exit 1
elif [[ $NUMBER -le 0 ]];then # Test value of argument is less than or equal to zero
echo "Please enter a number > 0"
exit 1
fi
while [["$NUMBER" -ne 1]];do
printf $NUMBER
if [[$NUMBER -gt 1]];then
printf ","
fi
NUMBER=$(($NUMBER-1))
done
printf $NUMBER
当我从shell运行它时,我不断得到“请输入一个整数作为参数”作为输出,尽管条目是3,或类似的东西。
我注意到用户输入没有任何内容,所以我尝试用
输入read -p NUMBER
在if语句之前。
我在代码中缺少什么来继续运行其余的脚本?
答案 0 :(得分:6)
您应该在[ ... ]
条件中对变量进行双引号,或者使用扩展的[[ ... ]]
条件(是的,第三种类型的条件)。对于数值运算,通常使用(( .. ))
(哦,我的,第四种类型!)。
请参阅man bash
或Advanced Bash Scripting Guide。
答案 1 :(得分:1)
应该使用
获取第一个传递的参数NUMBER=$1
不知道你的意思是$X
..
注意:$ 0是执行的命令,例如./myscript.sh foo
$0 = ./myscript.sh
和$1 = foo
将其设置为变量NUMBER
后,您可以检查它是否为正整数:
if [[ $NUMBER =~ ^[0-9]+$ ]]; then
echo "It's ok!"
else
echo "BAD :("
fi
答案 2 :(得分:0)
要接受一个参数,你应该检查传递给脚本的参数数量(这是我认为你的老师所问的):
if [[ $# -ne 1 ]]
$#为您提供传递给脚本的参数数量,因此很容易检查传递给它的参与者的数量。 现在你只需要检查它是否是一个整数和符号。我不知道老师想要你知道的究竟是什么,但你可以使用awk的函数检查参数是一个数字,一个整数及其符号(用ksh也很容易签名)。
答案 3 :(得分:-1)
你应该删除导致前一个失败的read -p NUMBER
指令。
然后你应该修理那条线:
elif [[ $NUMBER -le 0 ]];then
到
elif [ "$NUMBER" -le 0 ];then
最后一部分是使用了错误的测试,并且缺少一个结束的新行:
while [["$NUMBER" -ne 1]];do
printf $NUMBER
if [[$NUMBER -gt 1]];then
printf ","
fi
NUMBER=$(($NUMBER-1))
done
printf $NUMBER
应该是
while [ $NUMBER -ne 1 ];do
printf $NUMBER
if [ $NUMBER -gt 1 ];then
printf ","
fi
NUMBER=$((NUMBER-1))
done
printf "%s\n" $NUMBER