Bash:需要数字参数

时间:2018-04-01 03:26:26

标签: bash shell

我的代码如下

word=$1
if [ $word = "night" ]
then
    redshift -O 1300 > /dev/null
elif [ $word = "movie" ]
then
    redshift -x > /dev/null
else
    redshift -O 2800 > /dev/null
fi

虽然我每次都跑它

justin@justin: shift night

我收到错误

bash: shift: night: numeric argument required

编辑:当我将其作为

运行时
./shift night

按预期工作

我不完全确定为什么。 (我的想法是编写一个脚本,根据关键字改变屏幕的温度,然后在java中为它构建一个GUI来使用它!)

2 个答案:

答案 0 :(得分:6)

shift是bash中内置命令的名称,解释了当你这样调用它时的奇怪错误。此外,即使您已经调用了其他内容,当前目录也不在您的PATH中,因此您需要使用./限定当前目录中的二进制文件来调用它,如您所发现的那样。 (如果您将命令调用为其他内容而不是使用./作为前缀,则会发现命令未找到错误。)

答案 1 :(得分:-1)

Joseph Sible's answer涵盖了正确的问题,除此之外,代码应该使用case而不是所有if s:

case "$1" in
     night) redshift -O 1300 ;;
     movie) redshift -x ;;
     *)     redshift -O 2800 ;;
esac > /dev/null