Я бездельничаю со сценариями, я могу создать сценарий, который, когда выполненный предлагает мне название нового dir, создает их, затем создает несколько файлов, эхо намечает, затем удаляет все это.
То, что я хотел бы сделать, превратить его немного, таким образом, это создает и называет каталог совершенно отдельно!
Кажется бессмысленным осуществлением, которое я знаю, но бездельничающий с ним лучший способ, которым я учусь.
Вот мой текущий сценарий:
#!/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
Если Вы хотите удивление, вместо жесткого кодирования имя Вы могли бы использовать технику для генерации случайной строки, например
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"
...
Вместо того, чтобы запросить ввод данных пользователем, Вы можете значения hardcode в сценарии при помощи переменного оператора присваивания (=). Таким образом следующие две строки,
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}
Вы могли даже пойти один шаг вперед: Вы могли сказать "чтению" предлагать суждение для имени папки, принимать его путем нажатия возврата или изменять его, как Вам нравится:
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