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} 
Другие вопросы по тегам