Ksh和if语句

时间:2014-01-14 09:34:49

标签: linux shell if-statement scripting ksh

我在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语句之前

我在代码中缺少什么来继续运行其余的脚本?

4 个答案:

答案 0 :(得分:6)

您应该在[ ... ]条件中对变量进行双引号,或者使用扩展的[[ ... ]]条件(是的,第三种类型的条件)。对于数值运算,通常使用(( .. ))(哦,我的,第四种类型!)。

请参阅man bashAdvanced 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