Сценарий Bash для создания каталога

Я бездельничаю со сценариями, я могу создать сценарий, который, когда выполненный предлагает мне название нового 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"
7
задан 4 September 2017 в 03:27

4 ответа

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

заменяют следующую строку в Вашем сценарии:

read NEW_DIR    

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

NEW_DIR="new_dir_hard_coded_value"

Ссылка для большего количества информации приблизительно bash-scripting-tutorial/bash-variables

5
ответ дан 23 November 2019 в 06:14

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

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"
...
5
ответ дан 23 November 2019 в 06:14

Вместо того, чтобы запросить ввод данных пользователем, Вы можете значения 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} 
3
ответ дан 23 November 2019 в 06:14

Вы могли даже пойти один шаг вперед: Вы могли сказать "чтению" предлагать суждение для имени папки, принимать его путем нажатия возврата или изменять его, как Вам нравится:

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
3
ответ дан 23 November 2019 в 06:14

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

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