Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Ksh和if语句 我在C++中做的编程很少,我真的不知道如何在KNopixOS上使用KornShell(KSH)中的代码。教授给我们的资源很少,所以很难计算出来。我们课堂上的两本教科书主要讨论UNIX变体中的命令,但与ksh的关系不大_Linux_Shell_If Statement_Scripting_Ksh - Fatal编程技术网

Linux Ksh和if语句 我在C++中做的编程很少,我真的不知道如何在KNopixOS上使用KornShell(KSH)中的代码。教授给我们的资源很少,所以很难计算出来。我们课堂上的两本教科书主要讨论UNIX变体中的命令,但与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

编写一个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语句之前


要继续运行脚本的其余部分,代码中缺少了什么?

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


请参见
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]];do
NUMBER=$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