web-dev-qa-db-fra.com

Script Bash pour créer un répertoire

Je m'amuse avec les scripts, je peux créer un script qui, lorsqu'il est exécuté, m'invite à donner un nom à un nouveau répertoire, le crée, crée plusieurs fichiers, renvoie les lignes en écho, puis le supprime entièrement.

Ce que je voudrais faire, c'est le transformer légèrement afin qu'il crée et nomme le répertoire tout seul!

Cela semble être un exercice inutile, mais le décoder est le meilleur moyen d’apprendre.

Voici mon script actuel:

#!/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
SimplySimplified

Au lieu d'utiliser la commande read afin d'obtenir la valeur de NEW_DIR à partir de l'entrée, vous pouvez définir une valeur codée en dur pour la variable NEW_DIR de la manière suivante :

remplacez la ligne suivante dans votre script:

read NEW_DIR    

avec la ligne suivante:

NEW_DIR="new_dir_hard_coded_value"

Lien pour plus d'informations sur bash-scripting-tutorial/bash-variables

5
Yaron

Si vous voulez une surprise, au lieu de coder en dur le nom, vous pouvez utiliser une technique pour générer une chaîne aléatoire, par exemple

NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)

Ceci définit NEW_DIR sur une chaîne de huit caractères alphanumériques. Chaque fois que vous exécutez le script, le nouveau répertoire aura un nom aléatoire différent ...

Ou, pour obtenir un mot aléatoire, choisissez un dictionnaire dans /usr/share/dict/ et utilisez shuf, par exemple:

$ shuf -n1 /usr/share/dict/british-english
soupier
$ shuf -n1 /usr/share/dict/british-english
penguins

Alors

NEW_DIR=$(shuf -n1 /usr/share/dict/british-english)
mkdir "$NEW_DIR"
...
5
Zanna

Au lieu d'inviter l'utilisateur à entrer, vous pouvez coder en dur des valeurs dans des scripts à l'aide de l'opérateur d'affectation de variable (=). Ainsi, les deux lignes suivantes,

 echo "Donnez un nom de répertoire pour créer:" 
 read NEW_DIR 

peut être remplacé par une seule ligne.

NEW_DIR = "quel que soit le nom de votre choix"



En passant, je sais que cela n’est pas pertinent pour la question, mais vous pouvez écrire un code abrégé pour la plage dans la boucle for que vous avez utilisée dans votre script. Au lieu de 9 8 7 6 5 4 3 2 1 0, vous pouvez l’écrire ainsi:

 pour n dans {9..0} 
3
Mukesh Sai Kumar

Vous pouvez même aller plus loin: vous pouvez indiquer "read" pour proposer une proposition de nom de dossier, acceptez-le en appuyant sur la touche Entrée ou modifiez-le à votre guise:

read -p "Give a directory name to create: " -ei "default_name" NEW_DIR;

cela montrerait une ligne:

Give a directory name to create: default_name

Pour combiner les suggestions ci-dessus, vous pouvez procéder comme suit:

# 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;

Notez que read -p "text" demandera le texte et demandera la réponse dans la même ligne. Si vous voulez vous en tenir à votre code et le faire demander le format 2 lignes que vous pourriez faire

echo "Give a directory name to create:"  
read -ei "$NEW_DIR" NEW_DIR
3
stealz