在bash上制作shell程序并调用程序中的文件并更改文本

在bash上制作shell程序并调用程序中的文件并更改文本

我被指示制作一个javascript。在学习了一些 shell 脚本(非常少)之后。我创建了以下内容。

for item in *
do
    if [ -f $item ]
    then 
        sed  's/test/open/g' file.sh
done

我相信这个程序会在我放置这个程序的文件夹中查找文件。然后找到 file.sh 并将单词 test 替换为 open,根据我从 sed 的理解(如果不是真的,请再次原谅我)。我该如何修改它,以便该程序查找程序中的所有 .sh 文件,而不是一个文件,并在所有文件中找到单词 test 并将其替换为 open。很抱歉,如果是的话,这还很模糊,但这就是我必须处理的一切。

答案1

您的脚本在几个方面存在缺陷。

for item in * <--do the following action on every item in this directory
do

         if [ -f $item ]  <--if the item is a file then do this
         then 
                sed  's/test/open/g' file.sh  <-- replace "test" with "open" in the file - file.sh
          <--missing closing "fi" statement here
done

我不太确定您要做什么,但如果您只想将文件中每次出现的 test 替换为 open :如果您想在每个文件中替换它,file.sh您可能应该这样做:sed 's/test/open/g' file.sh

#!/bin/bash
#
script=$(basename "$0")
for item in "/path/to/files/"*; do
    if [[ "$item" == "$script" ]]; then
        :
    elif [[ -f "$item" || "${item: -2}" = "sh" ]]; then 
        sed -i 's/test/open/g' "$item"
    fi
done

编辑

如果您不确定自己在做什么,则应该非常小心地使用此脚本。确保您指向正确的目录,并注意您只是一揽子修改其中的每个文件。

答案2

首先我们要澄清一些误解:

您的脚本目前做什么?它迭代脚本所在目录中的每个项目被处决(不是它放置的地方)。然后它查找每​​个项目,无论它是否是文件。如果它是一个文件,那么它会打开该文件file.sh并使用sed.

它应该做什么:

它应该打开实际的项目,而不是file.sh在每个 true语句之后打开。if

为了实现这一目标,您可以进行哪些更改:

file.sh在命令中替换sed$item

相关内容