昨天我在另一个帖子中发布了一个关于我正在进行的项目的问题。我对UNIX编程非常陌生,而且我的脚本也有很多挣扎。让我先说明脚本的目的。
目的:对每个计算使用单独的函数,如果每个整数是偶数或奇数,素数(或不是),以及在命令行输入的参数的整数因子,脚本将计算并打印。应为每个数字命令行参数调用此函数。如果输入非整数,脚本将生成错误消息并转到下一个数字。我必须使用Bourne shell。
问题 - 在取得一些进展之后,我在两条战线上难以接受: 1:如果我输入1作为我的一个参数,则输出重复两次" 1不是素数。" 2:我尝试过使用dev / null命令,但是如果输入了非整数参数,我们就无法找到正确的代码来触发错误。 任何这些任何帮助表示赞赏。
这是我的代码:
#!/bin/sh
prime () {
if [ $Num -eq 1 ]
then
echo "$Num is not a prime number"
fi
Pcheck=`factor $Num|wc -w`
if [ $Pcheck -eq 2 ]
then
echo "$Num is a prime number"
else
echo "$Num is not a prime number"
fi
}
even_odd () {
rem=$(( $Num % 2))
if [ $rem -eq 0 ]
then
echo "$Num is an even number"
else
echo "$Num is an odd number"
fi
}
while [ $# -gt 0 ]
do
Num=$1
prime Num
even_odd Num
shift
done
答案 0 :(得分:0)
如果输入了非数字值,则管理以完成脚本保存错误消息。
#!/bin/sh
factors () {
i=1
while [ $i -le $Num ]
do
if [ `expr "$Num" % $i` -eq 0 ]
then
echo -n "$i "
fi
i=`expr $i + 1`
done | sort -nu
}
prime () {
Pcheck=`factor $Num|wc -w`
if [ $Pcheck -eq 2 ]
then
echo "$Num is a prime number"
else
echo "$Num is not a prime number"
fi
}
even_odd () {
rem=$(( $Num % 2))
if [ $rem -eq 0 ]
then
echo "$Num is an even number"
else
echo "$Num is an odd number"
fi
}
while [ $# -gt 0 ]
do
Num=$1
if [ "$Num" -eq "$Num" ] 2>/dev/null
then
echo “$Num is not a valid number “
fi
prime Num
even_odd Num
factors Num
shift
done