【问题标题】:How to resolve "shift: can't shift that many" error while running a shell script?如何在运行 shell 脚本时解决“shift: can't shift that many”错误?
【发布时间】:2016-07-06 04:48:01
【问题描述】:

我有一个不同方法的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 服务器上运行我的脚本。我试图解决这个问题,但我没有找到任何正确的链接来解决这个错误。有人请帮忙。

【问题讨论】:

  • 您不能移动超过$#。当$# 为0 时(如在start 的调用中),您根本不能使用shift。在函数内部,"$@" 等是函数调用的参数,而不是整个脚本的参数。
  • @JonathanLeffler 我该如何解决?如何更改start() 方法中的if condition?或如何更改start() 方法,使其采用command line arguments
  • @Cyrus 我没听懂你说的。你能解释一下我哪里出错了
  • 你可能不知道;你打电话给start arg1 arg2 arg3,这样你就可以把arg1移开,然后使用$1$2。当然,如果您只想忽略它,为什么要传递原始的$1(我的大纲调用中的arg1)是一个问题——但您可能会自己弄清楚。
  • @user6348718:我错了。

标签: bash shell ubuntu jmeter scripting-language


【解决方案1】:

这些是函数,而不是方法。不要在没有开始适用的地方过度使用 OOD 术语。

避免移位错误的最佳方法是在参数用完时不要移位。检查 $# 的值BEFORE你转移。

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

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2014-03-12
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多