Linux Ksh和if语句 我在C++中做的编程很少,我真的不知道如何在KNopixOS上使用KornShell(KSH)中的代码。教授给我们的资源很少,所以很难计算出来。我们课堂上的两本教科书主要讨论UNIX变体中的命令,但与ksh的关系不大
编写一个shell脚本,该脚本只接受一个必须为正整数的参数。(我的第二个有两个) Ksh代码:Linux Ksh和if语句 我在C++中做的编程很少,我真的不知道如何在KNopixOS上使用KornShell(KSH)中的代码。教授给我们的资源很少,所以很难计算出来。我们课堂上的两本教科书主要讨论UNIX变体中的命令,但与ksh的关系不大,linux,shell,if-statement,scripting,ksh,Linux,Shell,If Statement,Scripting,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 les
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语句之前
要继续运行脚本的其余部分,代码中缺少了什么?您应该在
[…]
条件中双引号引用变量,或者使用扩展的[…]
条件(是的,第三种条件)。对于数值运算,通常使用(…)
(哦,天哪,第四种类型!)
请参见
manbash
或。应使用
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
要只接受一个参数,您应该检查传递给脚本的参数数量(我认为您的老师正在问这个问题): $#提供传递给脚本的参数数量,因此很容易检查传递给脚本的参数数量。
现在只需要检查它是否是整数和符号。我不知道你的老师到底想让你知道什么,但是你可以使用awk的函数来检查参数是否是一个数字、一个整数和它的符号(这个符号在ksh中也很简单)。你应该删除
read-p number
指令,该指令击败了之前的指令
然后,您应该修复该行:
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
@用户3193284:试着问问教授。在教学时,我鼓励学生提问。OP脚本根本没有使用
csh
语法elif
绝对受bash
、ksh
和任何兼容POSIX的shell支持,并且不是csh
关键字。另一个评论是,问题是关于ksh
,但您建议使用bash
文档。尽管它们大部分都是POSIX shell,并且共享许多扩展,但每一个都有其特殊性,因此bash脚本指南可能会混淆操作。@jlliagre:elif的说法是正确的。尽管如此,我还是回答了原来的问题,这个问题经过了大量编辑和重新标记。开始时,它被标记为bash
,并将作品包含在标题中。然后删除my-1。您应该删除第一句话。@jlliagre:Done。谢谢。我想不会,如果你的老师要求脚本只接受1个参数,$#就是答案。您只需在检查只有一个参数传递给脚本后测试$1。我的意思是,删除“”并在[[之前]]--->之后添加一个空格,而[$NUMBER-ne 1]];doNUMBER=$1
是shell中的一个语法错误-清除=
周围的空格。您可以在C或C++或Python或Perl或……中使用,但不在BASH/KSH/SH中(不记得CSH中是否可以接受,但这没问题,真的)。谢谢。在帮助下,我发现它对接受的语法非常挑剔。必须是[[和]]之前的空格。我已回滚此问题。你可以通过投票选出对你有帮助的答案和评论来表达感谢,并接受对你帮助最大的答案和评论。
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