Я возился со скриптами, я могу создать скрипт, который при запуске подскажет мне имя для нового каталога, создает его, затем создает несколько файлов, выдает эхо-строки, а затем удаляет все.
То, что я хотел бы сделать, это немного изменить его, чтобы он создавал именовал каталог сам по себе!
Кажется бессмысленным упражнением, которое я знаю, но возиться с ним - лучший способ узнать.
Вот мой текущий скрипт:
#!/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"
Вместо использования команды read, чтобы получить значение NEW_DIR на входе, вы можете задать жестко заданное значение для переменной NEW_DIR следующим образом:
заменить следующую строку в вашем скрипте:
read NEW_DIR
со следующей строкой:
NEW_DIR="new_dir_hard_coded_value"
Ссылка для получения дополнительной информации о bash-scripting-tutorial / bash-variables Вместо использования команды read, чтобы получить значение NEW_DIR на входе, вы можете задать жестко заданное значение для переменной NEW_DIR следующим образом:
заменить следующую строку в вашем скрипте:
read NEW_DIR
со следующей строкой:
NEW_DIR="new_dir_hard_coded_value"
Ссылка для получения дополнительной информации о bash-scripting-tutorial / bash-variables Вместо использования команды read, чтобы получить значение NEW_DIR на входе, вы можете задать жестко заданное значение для переменной NEW_DIR следующим образом:
заменить следующую строку в вашем скрипте:
read NEW_DIR
со следующей строкой:
NEW_DIR="new_dir_hard_coded_value"
Ссылка для получения дополнительной информации о bash-scripting-tutorial / bash-variables Если вам нужен сюрприз, вместо жесткого кодирования имени вы можете использовать технику для генерации случайной строки, например
NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)
Это устанавливает NEW_DIR в строку из восьми буквенно-цифровых символов. Каждый раз, когда вы запускаете скрипт, новый каталог будет иметь другое случайное имя ...
Или, чтобы получить случайное слово, выберите словарь из /usr/share/dict/ и используйте shuf, например: [ ! d2]
$ 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"
...
Вместо того, чтобы запрашивать ввод пользователя, вы можете жестко кодировать значения в сценарии, используя оператор присваивания переменных (=). Таким образом, следующие две строки:
echo "Give a directory name to create:" read NEW_DIRмогут быть заменены одной строкой.
NEW_DIR="whatever_name_you_please"
BTW , Я знаю, что это не относится к вопросу, но в цикле for, который вы использовали в своем скрипте, вы можете написать сокращенный код для диапазона. Вместо 9 8 7 6 5 4 3 2 1 0 вы можете записать его как
for n in {9..0}Вы даже можете пойти еще дальше: вы можете сказать «прочитать», чтобы предложить предложение для имени папки, принять его, нажав 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;
Обратите внимание, что read -p "text" будет запрашивать текст и попросите ответ в той же строке. Если вы хотите придерживаться своего кода и попросите 2-строчный формат, вы можете сделать
echo "Give a directory name to create:"
read -ei "$NEW_DIR" NEW_DIR
Вместо того, чтобы запрашивать ввод пользователя, вы можете жестко кодировать значения в сценарии, используя оператор присваивания переменных (=). Таким образом, следующие две строки:
echo "Give a directory name to create:" read NEW_DIRмогут быть заменены одной строкой.
NEW_DIR="whatever_name_you_please"
BTW , Я знаю, что это не относится к вопросу, но в цикле for, который вы использовали в своем скрипте, вы можете написать сокращенный код для диапазона. Вместо 9 8 7 6 5 4 3 2 1 0 вы можете записать его как
for n in {9..0}Вы даже можете пойти еще дальше: вы можете сказать «прочитать», чтобы предложить предложение для имени папки, принять его, нажав 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;
Обратите внимание, что read -p "text" будет запрашивать текст и попросите ответ в той же строке. Если вы хотите придерживаться своего кода и попросите 2-строчный формат, вы можете сделать
echo "Give a directory name to create:"
read -ei "$NEW_DIR" NEW_DIR
Если вам нужен сюрприз, вместо жесткого кодирования имени вы можете использовать технику для генерации случайной строки, например
NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)
Это устанавливает NEW_DIR в строку из восьми буквенно-цифровых символов. Каждый раз, когда вы запускаете скрипт, новый каталог будет иметь другое случайное имя ...
Или, чтобы получить случайное слово, выберите словарь из /usr/share/dict/ и используйте shuf, например: [ ! d2] $ 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"
...
Вместо того, чтобы запрашивать ввод пользователя, вы можете жестко кодировать значения в сценарии, используя оператор присваивания переменных (=). Таким образом, следующие две строки:
echo "Give a directory name to create:" read NEW_DIRмогут быть заменены одной строкой.
NEW_DIR="whatever_name_you_please"
BTW , Я знаю, что это не относится к вопросу, но в цикле for, который вы использовали в своем скрипте, вы можете написать сокращенный код для диапазона. Вместо 9 8 7 6 5 4 3 2 1 0 вы можете записать его как
for n in {9..0}Вы даже можете пойти еще дальше: вы можете сказать «прочитать», чтобы предложить предложение для имени папки, принять его, нажав 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;
Обратите внимание, что read -p "text" будет запрашивать текст и попросите ответ в той же строке. Если вы хотите придерживаться своего кода и попросите 2-строчный формат, вы можете сделать
echo "Give a directory name to create:"
read -ei "$NEW_DIR" NEW_DIR
Если вам нужен сюрприз, вместо жесткого кодирования имени вы можете использовать технику для генерации случайной строки, например
NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)
Это устанавливает NEW_DIR в строку из восьми буквенно-цифровых символов. Каждый раз, когда вы запускаете скрипт, новый каталог будет иметь другое случайное имя ...
Или, чтобы получить случайное слово, выберите словарь из /usr/share/dict/ и используйте shuf, например: [ ! d2] $ 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"
...