Bash While循环新参数

时间:2016-10-28 18:45:42

标签: linux bash shell

嗨,有人可以帮助我一个无限循环,即采取新的论点。 是否有一个读命令,每个空格都像命令行那样作为新参数。所有人似乎都将这一切都归结为一个大论点

我有一个脚本,当被调用它进入无限循环时。 第一个参数将确定调用另一个脚本的情况,然后第二个参数将被发送到该脚本。 然后我想再次循环并在同一行中再次询问用户两个参数。第一个确定案例并使用第二个......

但是我希望这些在一行中,就好像它是命令行一样。 我相信read命令会将整行设置为变量,而我想再次执行1美元和2美元。

我提供了一些代码来描述我的问题,谢谢你提前

我基本上需要一个读命令,它将拆分成命令行之类的参数。

while true :
do

        # make decision using case..in..esac 
        choice = $1
        case $choice in
                create)

                        ./create.sh $2
                        ;;
                add)
                        ./add.sh $2     

                        ;;
                    *)
                        echo "Error: Invalid option..." 
                        ;;
        esac
done

2 个答案:

答案 0 :(得分:2)

您想“向用户询问两个参数”。下面列出了至少三种方法。我想您希望在do之后和case之前添加其中的任何内容。

  1. 喜欢@ John1024说,

    read choice second_arg
    

    将填写$choice$second_arg修改直接使用choice,您将不需要choice="$1"

  2. 这个序列:

    read
    set -- $REPLY
    

    将使用命令行中的字词替换$1$2,....然后你仍然可以使用choice="$1",就像你拥有它一样。

  3. 保持命令行参数更一般,

    read -a inputs
    

    会将单词读入数组inputs,因此您可以将其引用为${inputs[0]}${inputs[1]},...,无论输入数量多少。然后你可以使用

    choice="${inputs[0]}"
    

    而不是choice="$1"

答案 1 :(得分:0)

希望这有帮助。

while true :
do
    echo -n "Enter Your Choice  > "
    read text

    arg1=$(echo "$text" | awk '{print $1}')
    arg2=$(echo "$text" | awk '{print $2}')
    # make decision using case..in..esac 
    choice="$arg1"
    case $choice in
            create)

                    ./create.sh $arg2
                    ;;
            add)
                    ./add.sh $arg2    
                    ;;
                *)
                    echo "Error: Invalid option..." 
                    ;;
    esac
done