Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Bash脚本中迭代位置参数?_Bash_Scripting - Fatal编程技术网

如何在Bash脚本中迭代位置参数?

如何在Bash脚本中迭代位置参数?,bash,scripting,Bash,Scripting,我哪里做错了 我有一些文件如下: filename_tau.txt filename_xhpl.txt filename_fft.txt filename_PMB_MPI.txt filename_mpi_tile_io.txt ./script.sh tau xhpl mpi_tile_io fft PMB_MPI 我将tau、xhpl、fft、mpi\u tile\u io和PMB\u mpi作为位置参数传递给脚本,如下所示: filename_tau.txt filename_xhpl

我哪里做错了

我有一些文件如下:

filename_tau.txt
filename_xhpl.txt
filename_fft.txt
filename_PMB_MPI.txt
filename_mpi_tile_io.txt
./script.sh tau xhpl mpi_tile_io fft PMB_MPI
我将
tau
xhpl
fft
mpi\u tile\u io
PMB\u mpi
作为位置参数传递给脚本,如下所示:

filename_tau.txt
filename_xhpl.txt
filename_fft.txt
filename_PMB_MPI.txt
filename_mpi_tile_io.txt
./script.sh tau xhpl mpi_tile_io fft PMB_MPI
我希望grep在循环中搜索,首先搜索tau、xhpl等等

point=$1     #initially points to first parameter
i="0"
while [$i -le 4]
do
  grep "$str" ${filename}${point}.txt
  i=$[$i+1]
  point=$i     #increment count to point to next positional parameter
done

请参见,您需要shift单步执行位置参数。

像这样设置for循环。使用这种语法,循环迭代位置参数,依次将每个参数指定给“点”

for point; do
  grep "$str" ${filename}${point}.txt 
done

试着这样做:

# Iterating through the provided arguments
for ARG in $*; do
    if [ -f filename_$ARG.txt]; then
        grep "$str" filename_$ARG.txt 
    fi
done

有不止一种方法可以做到这一点,虽然我会使用
shift
,但这里有另一种方法可供选择。它使用Bash的间接功能:

#!/bin/bash
for ((i=1; i<=$#; i++))
do
    grep "$str" ${filename}${!i}.txt
done
#/bin/bash

为了((i=1;ibash脚本..很抱歉,我忘了提到itremember以便将类似的内容放入标记中,这使问题更容易为您的目标受众找到,即筛选出bash脚本作为有趣标记的人。请将代码格式化为代码-这将更容易理解。我建议在文件名arg周围加上引号ument避免了空格的麻烦。Aaron,说得好。我复制/粘贴了问题中的那一行,但没有编辑。Dennis,这不正确。没有必要直接指定给点。有关所有细节,请参阅Bash手册的“复合命令”部分。添加得不错Dennis-正是我现在需要的