Bash скрипт для создания директории
Я возиться со сценариями, я могу создать сценарий, который при запуске запрашивает у меня имя для нового каталога, создает его, затем создает несколько файлов, выводит строки, а затем удаляет все это.
Я хотел бы немного изменить его, чтобы он сам создавал и называл каталог!
Это бессмысленное упражнение, которое я знаю, но возиться с ним - лучший способ научиться.
Вот мой текущий сценарий:
#!/bin/bash
echo "Give a directory name to create:"
read NEW_DIR
ORIG_DIR=$(pwd)
[[ -d $NEW_DIR ]] && echo $NEW_DIR already exists, aborting && exit
mkdir $NEW_DIR
cd $NEW_DIR
pwd
for n in 9 8 7 6 5 4 3 2 1 0
do
touch file$n
done
ls file?
for names in file?
do
echo This file is named $names > $names
done
cat file?
cd $ORIG_DIR
rm -rf $NEW_DIR
echo "Goodbye"
4 ответа
Вместо использования read
Команда для того, чтобы получить значение NEW_DIR
Исходя из ввода, вы можете установить жестко запрограммированное значение для переменной NEW_DIR следующим образом:
замените следующую строку в вашем скрипте:
read NEW_DIR
со следующей строкой:
NEW_DIR="new_dir_hard_coded_value"
Ссылка для получения дополнительной информации о https://ryanstutorials.net/bash-scripting-tutorial/bash-variables.php
Если вы хотите сюрприз, вместо жесткого кодирования имени, вы можете использовать технику для генерации случайной строки, например
NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)
Это устанавливает NEW_DIR
до строки из восьми буквенно-цифровых символов. Каждый раз, когда вы запускаете скрипт, новый каталог будет иметь другое случайное имя...
Или, чтобы получить случайное слово, выберите словарь из /usr/share/dict/
и использовать shuf
, например:
$ shuf -n1 /usr/share/dict/british-english
soupier
$ shuf -n1 /usr/share/dict/british-english
penguins
Так
NEW_DIR=$(shuf -n1 /usr/share/dict/british-english)
mkdir "$NEW_DIR"
...
Вы могли бы даже пойти еще дальше: вы можете сказать "читать", чтобы предложить предложение для имени папки, принять его, нажав return или изменить его, как вам нравится:
read -p "Give a directory name to create: " -ei "default_name" NEW_DIR;
это покажет строку:
Give a directory name to create: default_name
Чтобы объединить с вышеупомянутыми предложениями, вы можете сделать следующее:
# pre-set NEW_DIR to a value or to any random string
# as suggested in the other answers
NEW_DIR="default_name"
# Prompt for new directory name, suggesting previously selected default answer
read -p "Give a directory name to create: " -ei "$NEW_DIR" NEW_DIR;
Обратите внимание, что чтение -p "текст" запросит текст и попросит ответить в той же строке. Если вы хотите придерживаться своего кода и попросить его о 2-строчном формате, вы можете сделать
echo "Give a directory name to create:"
read -ei "$NEW_DIR" NEW_DIR
Вместо того, чтобы запрашивать ввод данных пользователем, вы можете жестко закодировать значения в сценарии с помощью оператора присваивания переменной (=). Таким образом, следующие две строки,
echo "Дать имя каталога для создания:" читать NEW_DIR
можно заменить одной строкой.
NEW_DIR = "whatever_name_you_please"
Кстати, я знаю, что это не относится к вопросу, но в for
цикл, который вы использовали в вашем скрипте, вы можете написать сокращенный код для диапазона. Вместо 9 8 7 6 5 4 3 2 1 0
Вы можете написать это как
для п в {9..0}