我怎样才能进行多次阅读?

我怎样才能进行多次阅读?

我无法给出太多解释,因为我的英语很糟糕。我想做的例子如下;

这是一个例子。

尝试.sh

#!/bin/sh
echo -n "Enter the port:"
read ports
if [ ! -d "$ports" ]; then

mkdir -p /root/port$ports
echo "The folder was created for $ports"
wget -q www.example.com/example.tar.bz2
tar -xjf example.tar.bz2
su root -c "screen -A -m -d -S 'example$ports' ./example -RunningAsRootIsEvilAndIKnowThat"
echo "$ports started."
else
exit 0
fi

油灰;

root@ubuntu:~# sh try.sh
Enter the port: 4445, 4546
Created folder 'port4445'
Created folder 'port4546'
4445 started.
4546 started.

我需要 shell 脚本,而不是 bash。

答案1

您的脚本显示您正在#!/bin/shshebang 行中使用。这可能是一个问题,因为一些默认 shell 不支持数组。dashUbuntu就是一个例子。如果您绝对必须使用不能使用数组的默认 shell,请参阅链接中 Stephane 的答案。或者,可以像这样利用分词:

read -p "Enter ports(space separated):" ports
for port in $ports
do
       [ -d "/root/port$port" ] || mkdir -p "/root/port$port" && echo "Created /root/port$port"

done

另一方面,如果我们可以使用具有更多功能的 shell(并且在许多情况下操作系统有多个 shell),那么最好使用数组来存储端口。当数组可用(bash, ksh, mksh, zshshells )时我会采取的一般方法如下:

printf "Enter ports(space separated):"
read ports
arr=( $ports  )

在这里,我们利用 string 的优势,例如,80 22 23按空格分割(通常称为单词分割)并将这些单独的值提供给 array arr。这远非理想,但有效。

如果您可以使用 bash,则可以利用将read -a所有项目读取为数组,然后迭代这些值。例如:

bash-4.3$ read -p "Enter ports(space separated):" -a portsEnter ports(space separated):80 22 25
bash-4.3$ echo ${ports[0]}
80
bash-4.3$ echo ${ports[1]}
22
bash-4.3$ echo ${ports[2]}
25

同样的方法也可以用在kshwith上read -A

然后你可以做这样的事情:

for port in ${ports[@]};
do
   [ -d "/root/port$port" ] || mkdir -p "/root/port$port" && echo "Created /root/port$port"
done

我不熟悉,csh所以不会提供解决方案,但总体思路应该类似

相关内容