如果没有提供参数或命令不正确,如何退出重复循环

时间:2011-12-04 15:39:59

标签: bash shell scripting

我创建了这个脚本,用命令du -sh

每隔2秒检查一次指令中的磁盘使用情况

因此,当我使用./repeat.sh du -sh运行脚本时,它会输出:

52K     .
52K     .
52K     .
etc ...

这是脚本:

#!/bin/sh

while true
do
        if cmd="$1" "$@"
        then sleep 2
fi
done

我试图改变它,以便如果没有提供参数,例如sh位或提供的命令不正确它退出时没有做任何事情,但这个位在脚本中不起作用。如何根据我的具体情况设置这些条件?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以通过首先静默运行并验证其返回代码来测试命令的有效性(因为您无论如何都要在循环中运行它,您牺牲了一个执行来验证它):

$@ &>/dev/null
if [[ $? = 0 ]]
then
   echo "Valid command"
fi

至于检查参数,这是对$2参数的简单检查:

if [[ ! $2 ]]; then
   echo "No arguments"
fi

组合这些功能可以让您在脚本中获得所需的功能。