Другое решение:
$ cat cis132Students
peter
paul
mary
$ cat file
peter
mary
lucy
$ echo "There are $(grep -cf file cis132Students) classmates in this list, where $(wc -l <cis132Students) is the actual number of classmates."
There are 2 classmates in this list, where 3 is the actual number of classmates.
grep -cf file cis132Students
:параметр -f file
принимает file
в качестве входного файла шаблона для grep
, а -c
подсчитывает совпадающие строки wc -l <cis132Students
выводит количество строк без имени файла $HOME
— переменная. Вам не нужен новый. Итак, если вы знаете, что целевой каталог — $HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
, то это все, что вам нужно в вашем скрипте :
full_path="$HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2"
Например, рассмотрим этот скрипт:
#!/bin/bash
full_path="$HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2"
echo "Path is: $full_path"
Бег, который дает:
$ foo.sh
Path is: /home/terdon/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
Как видите, $HOME
спрашивать не нужно, он уже доступен внутри вашего скрипта по умолчанию.
Если вам нужны данные от пользователя, не запрашивайте их! Это подвержено ошибкам и раздражает пользователя. Просто возьмите его из командной строки:
full_path="$1"
## rest of the script
Затем вы должны вызвать сценарий с scriptName.sh $HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
, а затем переменная $full_path
в сценарии будет установлена на $HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
.
Наконец, если вы должны запросить пользователя по какой-то неясной причине, которую я не могу себе представить, вы можете запросить относительный путь. Например:
echo 'Please enter the relative path to the target directory.'
read -p "the path you enter will be assumed to be relative to $HOME: " full_path
echo "You entered: $full_path, moving there now"
cd "$full_path"
echo "We are currently in $PWD"
Бег, который даст:
$ foo.sh
Please enter the relative path to the target directory.
the path you enter will be assumed to be relative to /home/terdon: foo
You entered: foo, moving there now
We are currently in /home/terdon/foo