#!/bin/bash
# File Count
if (($# < 2))
then
echo "${0}: ERROR: Incorrect number of arguments entered." 1>&2
echo "${0}: USAGE: ${0} <directory> <filename>" 1>&2
exit 1
fi
#checks for a valid number of arguments then exits if the user doesn't provide them and shows an error message.
if [[ ! -d "${1}" ]]
then
echo "${0}: ERROR: directory ${1} does not exist." 1>&2
echo "${0}: USAGE: ${0} <directory> <filename>" 1>&2
exit 2
fi
#checks for a the directory the user specified then exits if the user doesn't provide a valid directory and shows an error message.
if [[ -d "${1}" ]]
then
typeset -i directoryCount=0
for files in $(ls)
do
((directoryCount++))
done
# if it's a directory file add 1 to the directory count
if [[ -x "${1}" ]]
then
typeset -i executableCount=0
for files in $(ls)
do
((executableCount++))
done
# if it's a executable file add 1 to the executable count
if [[ -f "${1}" ]]
then
typeset -i ordinaryCount=0
for files in $(ls)
do
((ordinaryCount++))
done
# if it's a ordinary file add 1 to the ordinary count
echo The number of directory files is "${directoryCount}"
echo The number of executable files is "${executableCount}"
echo The number of ordinary files is "${ordinaryCount}"
#display file counts
Имея проблемы с этой программой, хотя я думаю, что я нахожусь на правильных линиях. Может кто-нибудь предложить понимание? Ниже приводится то, что нужно делать. Спасибо.Программа подсчета количества файлов не работает
- Если путь к каталогу пуст, выйдите с сообщением об ошибке.
- Если путь к указанному каталогу не указан в существующем каталоге, тогда выйдите с сообщением об ошибке .
- Если содержимое каталога не может быть прочитано, выйдите с сообщением об ошибке.
- Инициализировать переменные для хранения трех пунктов обвинения
- Петли через каждый файл в папке с именем:
- если посчитать каталог как таковые;
- , если он является исполняемым граф как такой
- если считать это обычный файл как таковой
- выводить результаты.
'if [[-d" $ {1} "]]' всегда будет правдой, так как вы уже проверили, что противоположное значение неверно. Не [parse ls] (http://mywiki.wooledge.org/ParsingLs) просто используйте 'для файла в *'. Здесь вопрос о том, как добавить логику 'is executable'? –
Зачем нужен второй аргумент, который никогда не используется? Почему бы просто не использовать 'find' и не выводить вывод на' wc'? –
Это всегда логика, с которой я борюсь во время этих вещей, совершенно новых для этого типа программирования, а также – user3017497