Вызов утилит linux с опциями из скрипта Bash - PullRequest
0 голосов
/ 04 апреля 2010

Это мой первый скрипт на Bash, так что простите, если этот вопрос тривиален. Мне нужно посчитать количество файлов в указанном каталоге $ HOME / .junk. Я думал, что это будет просто, и предполагал, что будет работать следующее:

numfiles= find $HOME/.junk -type f | wc -l
echo "There are $numfiles files in the .junk directory."

Ввод find $HOME/.junk -type f | wc -l в командной строке работает точно так, как я ожидал, просто возвращая количество файлов. Почему это не работает, когда он введен в мой сценарий? Я пропускаю некоторые специальные обозначения, когда речь идет о передаче опций в утилиты?

Большое спасибо за ваше время и помощь.

Ответы [ 3 ]

5 голосов
/ 04 апреля 2010

Вам просто нужно окружить его галочками:

numfiles=`find $HOME/.junk -type f | wc -l`

Термин для этого подстановка команд .

4 голосов
/ 04 апреля 2010

если вы используете bash, вы также можете использовать $ () для подстановки команд, например:

numfiles=$(find $HOME/.junk -type f | wc -l)

Я считаю, что это немного более читабельно, чем обратные кавычки, а также возможность вкладывать несколько команд в одну.

1 голос
/ 04 апреля 2010

с bash 4 (если вы хотите рекурсивный)

#!/bin/bash
shopt -s globstar
for file in **
do
 ((i++))
done
echo "total files: $i"

, если нет

#!/bin/bash
shopt -s dotglob
shopt -s nullglob
for file in *
do 
  ((i++))
done 
echo "total files: $i"
...