Shell脚本错误

Shell脚本错误,shell,scripting,Shell,Scripting,我的任务要求: 创建一个目录~/UnixCourse/scriptAsst。翻两行的版本, 上面,将替换命令转换为shell脚本,subs1taking 三个参数:要替换的字符串要替换的字符串 替换为要在其中进行替换的文件的名称 比如说, `~/UnixCourse/scriptAsst/subst1 foo bar myFile.txt` 应将文件myFile.txt中出现的所有foo替换为bar,保留 原始文件为myFile.txt.bak 同样地 `~/UnixCourse/script

我的任务要求:

创建一个目录
~/UnixCourse/scriptAsst
。翻两行的版本, 上面,将替换命令转换为shell脚本,
subs1
taking 三个参数:要替换的字符串要替换的字符串 替换为要在其中进行替换的文件的名称

比如说,

`~/UnixCourse/scriptAsst/subst1 foo bar myFile.txt`
应将文件
myFile.txt
中出现的所有
foo
替换为
bar
,保留 原始文件为
myFile.txt.bak

同样地

`~/UnixCourse/scriptAsst/subst1 abc "" aardvark.dat`
应删除(替换为空字符串)文件
aardvark.dat
中出现的所有
abc
,但不包含任何内容,将原始文件保留为
aardvark.dat.bak

我的代码是:

#!/bin/bash

set p1 = "$1"
shift
set p2 = "$1"
shift
set p3 = "$*"

echo $p1
echo $p2
echo $p3

if grep "$p1" "$p3" > /dev/null; then
mv "$p3" "$p3.bak"
sed "s/$p1/$p2/g" "$p3.bak" > "$p3"
fi
当我尝试跑步时:

./subst1 foo bar myFile.txt
我不断得到:

grep: : No such file or directory

请帮忙!!我做错了什么???

这就是设置变量的方式:

p1="$1"
shift
p2="$1"
shift
p3="$1"
或者在这种情况下,简单地说:

p1="$1"; p2="$2"; p3="$3"
注:

  • 尝试使用有意义的变量名,或者直接使用
    $1
  • grep-q
    ,所以您不必重定向标准输出

或直接使用参数

#!/bin/bash

echo $1
echo $2
echo $3

if grep "$1" "$3" > /dev/null; then
  mv "$3" "$3.bak"
  sed "s/$1/$2/g" "$3.bak" > "$3"
fi

你实际上不需要做任何事情

sed -i.bak "s/$1/$2/g" "$3" 

echo$p1
..的脚本打印了什么?您复制并粘贴了吗?这个错误看起来像是在你的
grep
命令后出现了一个杂散的
。粘贴正是我所拥有的,它是
grep
无法找到一个没有名字的文件(
)。显然,
$p3
没有获取文件名。好的,这段代码有帮助。现在我得到错误:subst1:找不到备份文件(测试3)。这是课堂上的东西,一旦我得到这个,我会和其他的东西一起流动。那个代码对我有用。。。输入文件的名称和内容是什么?我输入:./subs1 foo bar myFile.txt对于我的testsstrange,我使用完全相同的命令。您的myFile.txt存在于同一目录中,并且包含一些文本(最好是一些“foo”s:)?好的,我现在看到了。我必须找出为什么考试不起作用。因为.bak文件在同一个目录中,所以这段代码对我很有帮助。现在我得到错误:subst1:找不到备份文件(测试3)。这是课堂上的事情,一旦我得到了这个,我会和其他一切一起流动。