Это одна из тех вещей, которая приходит из большого опыта. Вы были на правильном пути, глядя на echo
и printf
.
Я собираюсь начать с подстановки команд, потому что это первый метод, который приходит на ум. Я объединю это с echo
. (Это снова опыт.) Вы можете прочитать о подстановке команд во многих местах, попробовать поискать ее в Google или проверить вопрос и ответы здесь .
Наша цель может быть сформулирована как выполнение следующих шагов:
#Not real code
$ echo "<number_of_files> <number_of_directories>"
Подстановка команд просто позволяет нам использовать выходные данные команды, чтобы дать нам <number_of_files>
и <number_of_directories>
. Чтобы получить эти выходные данные, мы используем шаблон $(my_command)
, который даст любой вывод, который работает
$ my_command
на терминале дает. Надеюсь, это станет более понятным, когда вы доберетесь до помеченной мной части, выделив жирным шрифтом слова «Здесь мы выполняем подстановку команд».
Я собираюсь представить, что у вас есть структура каталогов, похожая на следующую. (Я называю это no_stack_dir
, потому что вы не хотите, чтобы ваши номера располагались друг над другом.)
no_stack_dir/
├── dir1
├── dir2
├── file1
├── file2
├── file3
└── file4
Я собираюсь упростить вещи, не создавая сценарий. Вместо использования "$1"
я просто собираюсь использовать имя каталога - в данном случае /home/jsmith147/no_stack_dir
. Прежде чем я покажу метод, я надеюсь убедиться, что наша настройка каталога понятна с помощью следующих команд.
$ cd ~
$ pwd
/home/jsmith147
$ls
no_stack_dir
$ls no_stack_dir
dir1 file2
dir2 file3
file1 file4
Обратите внимание, у меня есть только 2 подкаталога, потому что наша команда find
будет включать no_stack_dir
в свои найденные каталоги вместе с dir1
и dir2
.
Здесь мы делаем команду подстановки в сочетании с echo
.
Наш <number_of_files>
исходит от команды,
find /home/jsmith147/no_stack_dir -type f | wc -l
и наш <number_of_directories>
исходит от команды,
find /home/jsmith147/no_stack_dir -type d | wc -l
Обратите внимание, что я не помещал подсказку терминала, $
перед этими командами. Здесь начинается подстановка команд. Идем от
#Not real code
$ echo "<number_of_files> <number_of_directories>"
до
#Real code
$ echo "$(find /home/jsmith147/no_stack_dir -type f | wc -l) $(find /home/jsmith147/no_stack_dir -type d | wc -l)"
Я надеюсь, что с этими примерами я достаточно ясно дал понять, что вы можете написать скрипт (или что-то еще, использующее "$1"
), который будет запускать что-то вроде
$ ./no_stack.sh /home/jsmith147/no_stack_dir
Не стесняйтесь задавать вопросы. Есть много других способов выполнить то, что вы пытаетесь сделать. Возможно, SO-сообщество может предложить множество других способов получения того же результата. Было бы интересно перечислить их здесь.