Linux (Bash)如何将多个文件替换到脚本中?

Linux (Bash)如何将多个文件替换到脚本中?,linux,bash,file,substitution,Linux,Bash,File,Substitution,我有一个脚本,它接受一个参数($1)。所以我像这样运行它:bash script.sh file1.txt。但当我想替换更多文件(bash script.sh*)时,他只从所有文件中提取一个文件。我怎样才能让它工作?是否应该有另一个脚本将文件夹中的所有文件替换为$1到script.sh,或者有更简单的方法 #!/bin/bash sed -i '/^$/d' $@ declare -a command while read -r line do [[ "$line" =~ ^secretco

我有一个脚本,它接受一个参数($1)。所以我像这样运行它:bash script.sh file1.txt。但当我想替换更多文件(bash script.sh*)时,他只从所有文件中提取一个文件。我怎样才能让它工作?是否应该有另一个脚本将文件夹中的所有文件替换为$1到script.sh,或者有更简单的方法

#!/bin/bash
sed -i '/^$/d' $@
declare -a command
while read -r line
do
  [[ "$line" =~ ^secretcommand$ ]] || continue
  read -r cmd || break
  eval "$cmd"
  break
done<"$@"
#/bin/bash
sed-i'/^$/d'$@
声明-一个命令
而read-r行
做
[[“$line”=~^secretcommand$]| |继续
read-r cmd | | break
eval“$cmd”
打破

done代码中的循环旨在迭代给定文件的所有行。您需要添加一个外部循环来迭代每个文件

#!/bin/bash
sed -i '/^$/d' "$@"
for file in "$@"
  while read -r line
  do
    [[ "$line" =~ ^secretcommand$ ]] || continue
    read -r cmd || break
    eval "$cmd"
    break
  done<"$file"
done
#/bin/bash
sed-i'/^$/d'$@“
对于“$@”中的文件
而read-r行
做
[[“$line”=~^secretcommand$]| |继续
read-r cmd | | break
eval“$cmd”
打破

在脚本中使用
“$@”
完成您想要的任务?您也可以使用
shift
完成可能重复的任务。如果你的参数是abc,那么$1是“A”,$2是“B”,依此类推。执行shift后,“A”将消失,$1将成为“B”等等。@GrishaLevit是的,我尝试了“$@”,但它不起作用。@linuxfan问题是我不想定义文件的数量,但在一个文件夹中完成所有操作。非常感谢您的帮助!当我像这样运行它时,它可以正常工作:“bash script.sh*”,但是当我想以这种方式使用它时:“sh script.sh*”,那么我的输出就有一些问题,不能正常工作。为什么呢?作为bash和sh运行脚本有什么区别?我使用这个脚本在文件中查找word“secretcommand”,下一行始终是我希望在控制台中运行的命令。我是用sed空行删除的,因为有时候在我的文件中,关键字和命令之间有一些空行,我的脚本只有在命令在下一行正确时才工作。我建议的代码使用特定于bash的语法(您的问题被标记为
bash
sh
可能是不同的shell,因此如果由
sh
运行,则此语法将不起作用。脚本中是否包含第一行(带有
#!/bin/bash
)?脚本中是否包含第一行(带有
#!/bin/bash
)?如果是这样,你可以
chmod u+x
脚本并像运行程序一样运行它(将自动使用正确的shell)。哦,我现在明白了。我要试着用chmod。非常感谢。是的,我包括了第一行/bin/bash