Shell脚本错误

时间:2011-12-03 16:57:08

标签: shell scripting

我的作业要求:

  

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

     

例如,

`~/UnixCourse/scriptAsst/subst1 foo bar myFile.txt`
     

应该{​​{1}}替换文件foo中出现的所有myFile.txt,   原始文件为bar

     

类似地,

myFile.txt.bak
     

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

我想出的代码是:

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

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

3 个答案:

答案 0 :(得分:1)

这是你设置变量的方法:

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

或在这种情况下简单地说:

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

注意:

  • 尝试使用有意义的变量名称,或直接使用$1
  • grep -q,因此您无需重定向标准输出。

答案 1 :(得分:1)

您实际上并不需要做任何事情。

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

答案 2 :(得分:0)

或直接使用参数...

#!/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