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"
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
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"
...
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}
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