bash |没有"计算文件"

时间:2016-11-27 13:26:55

标签: linux bash shell switch-statement

我试图编写一个bash程序来计算目录中文件,目录,链接的数量,我试图比较给予文件的权限的第一个字符,即' s意味着我将为每个文件应用命令ls -l然后比较第一个字母,对于一个文件我得到-rwxrwxr-x这意味着它是一个文件因为它以 - 和drwxrwxr-开头x表示它是一个目录,因为它以" d"开头,我写了这段代码,但它没有正常工作,我不知道为什么,谢谢

#!/bin/bash
IFS=$'\n'

for f in `ls -l $1 | tail -n +2 `
do
fic=0
rep=0
lie=0
autre=0

t=${f:0:1}

case "$t" in
    ("-")
        fic=$((fic+1))
        ;;
    ("d")
        rep=$((rep+1))
        ;;
    ("l")
        lie=$((lie+1))
        ;;
    (*)
        autre=$((autre+1))
        ;;

esac

total=$((total+1))
done

command=$(pwd)
echo "Statistique de "$command
echo "Fichier(s) :" $fic
echo "Repertoire(s) :" $rep
echo "Lien(s) symbolique(s) :" $lie
echo "Autre :" $autre
echo "Total :" $total

2 个答案:

答案 0 :(得分:0)

William Pursell's suggestion一起将变量初始化移到循环之外,您应该使用test命令来查看给定文件是符号链接,目录,纯文件还是其他文件。

#!/usr/bin/env bash

fic=0
rep=0
lie=0
autre=0

for f in $1/*
do

  if [ -h "$f" ]
  then
    lie=$((++lie))
  elif [ -d "$f" ]
  then
    rep=$((++rep))
  elif [ -f "$f" ]
  then
    fic=$((++fic))
  else
    autre=$((++autre))
  fi

  total=$((++total))
done

command=$(pwd)
echo "Statistique de "$command
echo "Fichier(s) :" $fic
echo "Repertoire(s) :" $rep
echo "Lien(s) symbolique(s) :" $lie
echo "Autre :" $autre
echo "Total :" $total

答案 1 :(得分:0)

如果你的bash配备了gnu ls,那么还有一种不同的方式,而不需要所有这些。 Bellow在我的bash中使用ls GNU版本8.25

echo "Statistique de "$PWD
echo "Fichier(s) :" $(ls -l |egrep '^-' |wc -l)
echo "Repertoire(s) :" $(ls -l |egrep '^d' |wc -l)
echo "Lien(s) symbolique(s) :" $(ls -l |egrep '^l' |wc -l)
echo "Autre :" $(ls -l |grep -v -e '^l' -e '^d' -e '^-' |wc -l)
echo "Total :" $(ls -l |wc -l)