解释一个shell 脚本程序
程序目的是删除文件(其大小大于某个值)#!/bin/shif[$#-lt1]#就是搞不明白我根本就没有声明变量哪来的变量啊thenecho"usage:$0limite"...
程序目的是删除文件(其大小大于某个值)
#!/bin/sh
if [ $# -lt 1 ] #就是搞不明白我根本就没有声明变量 哪来的 变量啊
then echo "usage : $0 limite"; exit 1
fi
limite=$1 #这句话意思也不明白
set `ls -a` #不明白这条命令的目的
for fich in $*
do
if [ "$fich" == "." ] || [ "$fich" == ".." ]
then
continue
fi
if [ -d $fich ]
then
if [ -n "`ls $fich`" ]
then # le repertoire n est pas vide
#echo "dans le repertoire $fich"
cd $fich
pwd #知道pwd是求绝对路径 但是方这儿是干嘛呢
$0 $limite #不理解啥意思
cd ..
fi
else
if [ -f $fich ]
then
taille=`ls -l $fich | (read p l p g t r;echo $t)` #这句话看不懂
# les parentheses sont necessaires pour que t ait la valeur affectee
# autre solution passer par un fichier intermediaire :
# ls -l $fich >$0.tmp
# read <$0.tmp perm lien prop gr taille reste
# rm $0.tmp
if [ "$taille" -ge "$limite" ]
then
echo -n "Supprimer le fichier `pwd`/$fich de taille $taille (o/n)?"
read rep
case $rep in
o|O|y|Y) echo "le fichier $fich est detruit";;
*) echo " le fichier $fich est conserve";;
esac
fi
fi
fi
done 展开
#!/bin/sh
if [ $# -lt 1 ] #就是搞不明白我根本就没有声明变量 哪来的 变量啊
then echo "usage : $0 limite"; exit 1
fi
limite=$1 #这句话意思也不明白
set `ls -a` #不明白这条命令的目的
for fich in $*
do
if [ "$fich" == "." ] || [ "$fich" == ".." ]
then
continue
fi
if [ -d $fich ]
then
if [ -n "`ls $fich`" ]
then # le repertoire n est pas vide
#echo "dans le repertoire $fich"
cd $fich
pwd #知道pwd是求绝对路径 但是方这儿是干嘛呢
$0 $limite #不理解啥意思
cd ..
fi
else
if [ -f $fich ]
then
taille=`ls -l $fich | (read p l p g t r;echo $t)` #这句话看不懂
# les parentheses sont necessaires pour que t ait la valeur affectee
# autre solution passer par un fichier intermediaire :
# ls -l $fich >$0.tmp
# read <$0.tmp perm lien prop gr taille reste
# rm $0.tmp
if [ "$taille" -ge "$limite" ]
then
echo -n "Supprimer le fichier `pwd`/$fich de taille $taille (o/n)?"
read rep
case $rep in
o|O|y|Y) echo "le fichier $fich est detruit";;
*) echo " le fichier $fich est conserve";;
esac
fi
fi
fi
done 展开
2个回答
展开全部
if [ $# -lt 1 ] #就是搞不明白我根本就没有声明变量 哪来的 变量啊
then echo "usage : $0 limite"; exit 1
fi
$#是bash内置变量,存放脚本的参数数量。
---------
limite=$1 #这句话意思也不明白
$0 $1 $2,分别代表脚本本身的文件名,第一个参数,第二个参数,以此类推
---------
set `ls -a` #不明白这条命令的目的
通过set,将ls -a查到的内容赋值到$*中
---------
pwd #知道pwd是求绝对路径 但是方这儿是干嘛呢
在这里没看出有什么特殊作用
---------
$0 $limite #不理解啥意思
再次运行自己,就是简单地递归调用。
---------
taille=`ls -l $fich | (read p l p g t r;echo $t)` #这句话看不懂
类似awk取各个域内容一样,将ls -l $fich的结果通过| read放入各个变量中。并显示大小那一列
---------
大概就这样。
追问
大神啊 还有一些其他问题请教 能否加一下q q
展开全部
$1 $2 $3 ...
他们是参数变量展开的写法。
如果脚本文件 foo.sh 中写:
#!/bin/sh
while echo '$#=['"$#"'] $0=['"$0"'] $1=['"$1"'] $2=['"$2"'] $3=['"$3]" &&
test $# -gt 0
do shift; done
并运行之:
sh foo.sh A B C
你就可以看到其各自的替换关系。
================
执行 pwd 命令的目的在于显示一下在递归调用脚本处理哪个目录。
================
$0 $limite 是在该子目录中递归调用自己(当前脚本)。
================
$ ls -l input # 详细列出某文件的信息
-rw-r--r-- 1 levi staff 13 1 22 2013 input
$ | read p l p g t r # 读取上面 ls 的输出,存储到这6个变量中(有一个同名覆盖)
-rw-r--r-- 1 levi staff 13 1 22 2013 input
p^^^^^^^^^ l p^^^ g^^^^ t^ r
很容易注意到,read 执行后,t 变量存储着该文件的尺寸。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询