我必须创建一个shell脚本:计算具有此扩展名的文件数;计算总文件大小与此扩展名;向用户列出大小大于1000字节的(无扩展)LE的名称;要求用户确认是否删除较大文件;删除所有文件,如果用户回答肯定.我这样做,但它不为我工作,因为它不寻找扩展名键入的用户与awk.
#!/bin/bash
for file in "$@"
do
echo "I file con estensione $file sono:"
ls -l | awk '/$file/ {print $9}' | wc -l
a=$(ls -l | awk '/$file/ {somma+=$5} END {print somma}')
echo "La dimensione di tali file in totale e':$a"
echo "I file con estensione pdf che hanno dimensione maggiore di 1000 sono: "
ls -l|awk ' /$file/ && $5>1000 {print $9}'
echo "Vuoi cancellarli :
1) Si
2) No
Digita scelta : "
read answer
case $answer in
Si)
if ls -l | awk '/$file/ && $5>1000 {print $9}' | sed '/$file/d'
then
echo "I file cancellati sono: "
fi
;;
No)
echo "Non cancellati"
;;
*)
esac
done
你能告诉我出了什么问题,我该怎么修吗?
2条答案
按热度按时间kpbwa7wx1#
嗯,哪个分机?我在脚本里没有看到分机的内容,大概应该是这样的:
并且
$file
变量不会在''
中扩展,您应该使用""
或更好地将vars传递到awk
中,如下所示:fhity93d2#
您的脚本中有几个缺陷。让我尝试列出部分缺陷:
*斜杠引号。斜杠区分双引号和单引号。在单引号内,变量不展开。
*ls选项。可以使用-1强制每行一个文件。它比ls -l便宜。
*ls vs bash。挑战使用ls的强制性。你可以得到没有ls的文件列表,以及使用stat的大小。例如:
*注意regex。假设您正在查找.mov文件,并且有一个名为my-movies.txt的文件。您的awk表达式也与之匹配。
*使用变量。可以在脚本询问和用户回复之间添加一个文件。更好的方法是将文件保存在一个局部变量中。
*sed vs rm. sed行编辑器删除输入行,而不是磁盘上的文件。我理解这仍然可以满足练习的要求...