我有这个任务要解决:
“编写一个shell脚本,不断从键盘上读取单词 从命令行中给出的所有文件中删除它们。“
我试图解决它,这是我的尝试:
#!/bin/bash
echo "Enter words"
while (true)
do
read wrd
if [ "$wrd" != "exit" ]
then
for i in $#
do
sed -i -e 's/$wrd//g' $i
done
else
break
fi
done
这是我在介绍命令后收到的错误:./h84a.sh fisier1.txt
Enter words
suc
sed: can't read 1: No such file or directory
对不起,如果我不是很具体,这是我第一次在这里发帖。我在Linux Mint的终端上工作,它安装在我PC的另一个分区上。请帮我解决我的问题。谢谢!
答案 0 :(得分:1)
我认为你可以大大简化你的脚本:
#!/bin/bash
echo "Enter words"
while read -r wrd
do
[ "$wrd" = exit ] && break
sed -i "s/$wrd//g" "$@"
done
一些关键变化:
"$@"
read -r
is almost always what you want to use 我建议你使用-i
开关来处理就地编辑。在某些版本的sed中,您可以指定备份文件的后缀,例如-i.bak
,因此原始文件不会丢失。
如果您不熟悉语法[ "$wrd" = exit ] && break
,它在功能上等同于:
if [ "$wrd" = exit ]
then break
fi
答案 1 :(得分:0)
$#
扩展为参数数量(在本例中为1)
您可能打算使用$*
或"$@"