我正在制作一个脚本,用于使用 Upstart 监视某些用户进程,但是,由于它是为我工作的公司提供的,因此他们要求我通用......怎么样?好吧,被监视的进程数量可能会有所不同,就像数量和名称一样,所以我需要创建它,以便用户可以输入“n”个进程并为 shell 提供其路径名,以便我可以将它们存储在变量中并传递 Upstart一个包含它们的脚本,所以我的问题是:如何根据需要创建尽可能多的变量?
到目前为止,这是我的脚本......
./script input
#!/bin/bash
FILENAME=$1
i=1
while read LINE
do
[rutaServ$i]=$LINE
echo "ruta -> [rutaServ$i]"
i=`expr $i + 1`
done < $FILENAME
正如您所看到的,我暂时从纯文本文件中获取路径名,其中仅包含/home/user
行,但是当我运行此脚本时,出现以下错误[rutaServ1]=/home/user: The file or directory doesn't exists
这样做的正确方法是什么?
答案1
看起来你的数组语法有点不对劲。另外,不需要索引变量;您可以使用+=
运算符附加到数组。
#!/bin/bash
FILENAME=$1
rutaServ=()
while read LINE
do
rutaserv+=($LINE)
echo "ruta -> $LINE"
done < "$FILENAME"
bash
v4 有一个新命令mapfile
(或readarray
)可以一次性将文件内容读入数组:
mapfile rutaServ < "$FILENAME"
要访问数组中的值:
for x in "${rutaserv[@]}"; do
echo "$x"
done
答案2
脚本可以这样调用吗script.sh process1 process2
?然后你可以用以下方式引用参数$@
:
# set process1 process2 # set arguments for testing
for x in "$@"; do
echo "ruta -> $x"
done
[rutaServ$i]=$LINE
应该是rutaServ[$i]=$LINE
或rutaServ+=("$LINE")
.