如何解决运行 shell 脚本时"shift: can't shift that many"错误?



我有一个带有不同方法的shell脚本。脚本是

    status(){
    PID=$(ps -ef | grep jmeter_script.sh|grep -v grep|awk '{print $2}')
    }
    start(){
    shift
    if [ "$#" -ne 2 ]; then
            exit 1;
    fi
    jmeter.sh -n -t "$1"  -l "$2"
    }
    stop(){
        while true; do
            read -p "Do you really want to stop?" yn
            case $yn in
                [Yy]* ) ps -ef | grep jmeter | grep -v grep | awk '{print $2}'|xargs kill; break;;
                [Nn]* ) exit;;
                * ) echo "Please answer yes or no.";;
            esac
view(){
#some code
}
    ####Main
    while [ "$1" != "" ]; do
    case "$1" in
            start )
                start
                ;;
            stop)
                stop
                ;;
            status)
                status
                ;;
            view)
                view
                ;;
            *)
                echo $"Usage: $0 {start|stop|status|view}"
                exit 1
            esac
        shift
    done

当我尝试使用./jmeter_script.sh start abc.jmx log.jtl运行脚本时,我得到一个错误说./jmeter_script.sh: 19: shift: can't shift that many,然后退出。我在ubuntu服务器上运行我的脚本。我试图解决这个问题,但我没有找到这个错误的任何适当的链接。谁来帮帮我。

这些是函数,不是方法。不要在不适合的地方过度使用OOD术语。

避免移位错误的最好方法是当参数用完时不要移位。在移位前检查$# 的值

如果不指定大量标志,解析ps -ef输出会更容易。您所需要的只是PID和PNAME。

安全移位方式:shift $(( 3 > $# ? $# : 3))在本例中,我尝试移动3个位置,如果count小于3,我只移动max

相关内容

  • 没有找到相关文章

最新更新