我被指示制作一个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