嗨,有人可以帮助我一个无限循环,即采取新的论点。 是否有一个读命令,每个空格都像命令行那样作为新参数。所有人似乎都将这一切都归结为一个大论点
我有一个脚本,当被调用它进入无限循环时。 第一个参数将确定调用另一个脚本的情况,然后第二个参数将被发送到该脚本。 然后我想再次循环并在同一行中再次询问用户两个参数。第一个确定案例并使用第二个......
但是我希望这些在一行中,就好像它是命令行一样。 我相信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
答案 0 :(得分:2)
您想“向用户询问两个参数”。下面列出了至少三种方法。我想您希望在do
之后和case
之前添加其中的任何内容。
喜欢@ John1024说,
read choice second_arg
将填写$choice
和$second_arg
。 修改直接使用choice
,您将不需要choice="$1"
。
这个序列:
read
set -- $REPLY
将使用命令行中的字词替换$1
,$2
,....然后你仍然可以使用choice="$1"
,就像你拥有它一样。
保持命令行参数更一般,
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