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)。这是课堂上的事情,一旦我得到了这个,我会和其他一切一起流动。