Сценарий 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"
7
задан 4 September 2017 в 13:27

12 ответов

Вместо использования команды read, чтобы получить значение NEW_DIR на входе, вы можете задать жестко заданное значение для переменной NEW_DIR следующим образом:

заменить следующую строку в вашем скрипте:

read NEW_DIR    

со следующей строкой:

NEW_DIR="new_dir_hard_coded_value"
Ссылка для получения дополнительной информации о bash-scripting-tutorial / bash-variables
5
ответ дан 22 May 2018 в 18:48
  • 1
    Спасибо! Работало, так просто! Думайте, что поиск был бы проще с жестко закодированной фразой! – SimplySimplified 4 September 2017 в 12:53

Вместо использования команды read, чтобы получить значение NEW_DIR на входе, вы можете задать жестко заданное значение для переменной NEW_DIR следующим образом:

заменить следующую строку в вашем скрипте:

read NEW_DIR

со следующей строкой:

NEW_DIR="new_dir_hard_coded_value" Ссылка для получения дополнительной информации о bash-scripting-tutorial / bash-variables
5
ответ дан 18 July 2018 в 07:27

Вместо использования команды read, чтобы получить значение NEW_DIR на входе, вы можете задать жестко заданное значение для переменной NEW_DIR следующим образом:

заменить следующую строку в вашем скрипте:

read NEW_DIR

со следующей строкой:

NEW_DIR="new_dir_hard_coded_value" Ссылка для получения дополнительной информации о bash-scripting-tutorial / bash-variables
5
ответ дан 24 July 2018 в 18:48

Если вам нужен сюрприз, вместо жесткого кодирования имени вы можете использовать технику для генерации случайной строки, например

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"
...
5
ответ дан 22 May 2018 в 18:48

Вместо того, чтобы запрашивать ввод пользователя, вы можете жестко кодировать значения в сценарии, используя оператор присваивания переменных (=). Таким образом, следующие две строки:

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}
3
ответ дан 22 May 2018 в 18:48
  • 1
    нет его всех соответствующих спасибо, чем больше я вижу, тем больше я учусь! – SimplySimplified 4 September 2017 в 13:00

Вы даже можете пойти еще дальше: вы можете сказать «прочитать», чтобы предложить предложение для имени папки, принять его, нажав 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
3
ответ дан 22 May 2018 в 18:48

Вместо того, чтобы запрашивать ввод пользователя, вы можете жестко кодировать значения в сценарии, используя оператор присваивания переменных (=). Таким образом, следующие две строки:

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}
3
ответ дан 18 July 2018 в 07:27

Вы даже можете пойти еще дальше: вы можете сказать «прочитать», чтобы предложить предложение для имени папки, принять его, нажав 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
3
ответ дан 18 July 2018 в 07:27

Если вам нужен сюрприз, вместо жесткого кодирования имени вы можете использовать технику для генерации случайной строки, например

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" ...
5
ответ дан 18 July 2018 в 07:27

Вместо того, чтобы запрашивать ввод пользователя, вы можете жестко кодировать значения в сценарии, используя оператор присваивания переменных (=). Таким образом, следующие две строки:

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}
3
ответ дан 24 July 2018 в 18:48
  • 1
    нет его всех соответствующих спасибо, чем больше я вижу, тем больше я учусь! – SimplySimplified 4 September 2017 в 13:00

Вы даже можете пойти еще дальше: вы можете сказать «прочитать», чтобы предложить предложение для имени папки, принять его, нажав 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
3
ответ дан 24 July 2018 в 18:48

Если вам нужен сюрприз, вместо жесткого кодирования имени вы можете использовать технику для генерации случайной строки, например

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" ...
5
ответ дан 24 July 2018 в 18:48

Другие вопросы по тегам:

Похожие вопросы: