Comment créer un fichier de script pour les commandes de terminal?

114

Dans Windows , je peux écrire un fichier contenant des commandes pour cmd (généralement .cmdou .batfichiers). Lorsque je clique sur ces fichiers, il s’ouvre cmd.exeet exécute les commandes qu’il contient.

Comment pourrais-je faire cela dans Ubuntu?

Je suis sûr que c'est un doublon, mais je ne trouve pas ma réponse.
C'est semblable à ces questions, mais elles ne répondent pas à la question:

Stocker les commandes de terminal fréquemment utilisées dans un fichier

Émulateur CMD.exe dans Ubuntu pour exécuter le fichier .cmd / .bat

Seth
la source

Réponses:

150

Il y a deux méthodes.

Tout d’abord, le plus courant est d’écrire un fichier, assurez-vous que la première ligne est

#!/bin/bash

Puis enregistrez le fichier. Ensuite, marquez-le comme exécutable avecchmod +x file

Ensuite, lorsque vous cliquez sur (ou exécutez le fichier à partir du terminal), les commandes seront exécutées. Par convention, ces fichiers n'ont généralement pas d'extension, mais vous pouvez les faire se terminer de .shtoute autre manière.

Quelques notes:

  • N'importe quel (et je veux dire n'importe quel) fichier peut être exécuté sous Linux à condition que la première ligne soit un chemin d'accès au programme qui doit interpréter le fichier. Des exemples courants comprennent /bin/python, /bin/sh, /bin/dash, mais les choses balle même bizarre fonctionnent comme/bin/mysql
  • Bash est une langue complète. Il est beaucoup plus complexe que cmd.exe dans Windows. Il possède un langage de programmation puissant qui prend en charge les fonctions, les boucles, les conditions, les opérations sur les chaînes, etc.
  • Ces documents peuvent aider si vous rencontrez des problèmes.
  • Si vous ne souhaitez pas rendre le fichier exécutable, vous pouvez l'exécuter en le passant comme argument à bash: bash file/to/run.sh

Un exemple simple de Bash

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

La deuxième méthode consiste à enregistrer des commandes en utilisant script. Courez scriptalors faites juste des trucs. Une fois que vous avez terminé, le type exitet le script génèrent un fichier contenant tous les "éléments" que vous avez créés. Ceci est moins utilisé mais fonctionne assez bien pour faire des choses comme des macros. man scriptpour plus d'informations.

coteyr
la source
Vous voudrez peut - être que le changement /bin/bashà /bin/sh, bash est même pas la valeur par défaut pour Ubuntu.
TC1
@ TC1 Il est installé par défaut, donc peu importe que ce soit par défaut ou non.
Carlos Campderrós
1
Je tiens à souligner que /bin/dash(qui /bin/shest généralement liée à un lien symbolique), est beaucoup plus rapide que bash (j'ai mesuré environ 15 fois plus vite). Si possible, utilisez /bin/dashpour les scripts shell :)
MiJyn
4
Si vous êtes dans le même dossier que le fichier, assurez-vous de ./file.sh
coteyr
1
J'ai essayé les deux méthodes, mais si j'essaye de double-cliquer sur le fichier de script bash, il ouvre simplement le fichier texte dans geany / gedit, prêt à être édité. J'aimerais que le script soit exécuté après un double-clic. Cette question contient plus de détails sur ce que je veux faire.
Thymaro
15

Vous voulez dire écrire dans un fichier en utilisant un script shell? Voici quelques façons:

touch file

Cette méthode créera simplement un fichier, mais si le fichier existe déjà, elle modifie simplement la date de modification à l'heure à laquelle vous avez utilisé cette commande.

echo "text" > file

Cette méthode écrase le contenu de fileto text. Si vous voulez effacer un fichier, vous pouvez simplement faire ceci:

echo "" > file

Supposons que vous souhaitiez écrire plus d'une ligne et que vous ne souhaitiez pas utiliser des milliers de echocommandes, utilisez la commande suivante:

cat << EOF > file
test
test1
foo
bar
EOF

Cela vous permet d'écrire plusieurs lignes dans une commande. Le contenu de fileserait alors ceci:

test
test1
foo
bar

Si vous souhaitez ajouter un fichier, remplacez >par >>.

J'espère que cela t'aides!


EDIT : Oh, je vois, vous écrivez le fichier dans gedit, en utilisant l’ .shextension (facultatif, mais c’est une bonne idée), puis dans un gestionnaire de fichiers, cliquez avec le bouton droit de la souris sur le fichier, sélectionnez Propriétés-> Autorisations, puis cochez Allow executing file as program. Ensuite, vous pouvez double-cliquer dessus et il sera exécuté :). De plus, si vous voulez le faire dans le terminal, vous pouvez exécuter cette commande pour la rendre exécutable (vous pouvez ajouter du préfixe sudosi elle ne vous appartient pas):

chmod +x file

Et pour courir:

./file
MiJyn
la source
En fait, ce que je veux, c’est écrire un fichier, disons gedit, contenant des commandes de terminal. Ensuite, lorsque je double-clique sur ce fichier, il lance ces commandes dans le terminal.
Seth
Excellente réponse, mise à jour attentionnée. Pour créer simplement un fichier, j'ai toujours juste utilisétouch filename
TryTryAgain
@TryTryAgain, yep c'est une méthode facile, probablement plus rapide que echo "" > file. Est-ce que je peux inclure cette méthode dans ma réponse?
MiJyn
@MiJyn Absolument l'inclure, se sentir libre. Merci
TryTryAgain
Comment puis-je le faire pour exécuter n'importe où dans le terminal ... comme une commande globale?
Omer
14

Les scripts shell sont l'équivalent des fichiers de commandes Windows . Le script de démarrage est un excellent guide de démarrage .

Pour la plupart, les commandes que vous pouvez entrer sur la ligne de commande peuvent être placées dans un script shell.

Quelques éléments différents des fichiers de commandes Windows:

  • Il existe différents interpréteurs de commandes, appelés shells. La valeur par défaut est bash, mais si vous êtes intéressé, il en existe d’autres, tels que zsh, ksh, dash, perl, python, etc.

  • Pour exécuter un script shell, vous devez rendre le fichier exécutable, ce que vous pouvez faire avec chmod +x <filename>

  • Dans Ubuntu, le répertoire en cours n’est pas le chemin de recherche du programme, vous devez donc exécuter ./<filename>, non<filename>

  • Les noms de variables sont $<varname>, pas%<varname>%

  • Les commandes d'un script shell ne sont pas imprimées par défaut, comme dans un fichier de commandes.

  • L'extension du nom de fichier peut être .shou (plus habituel) vous n'avez pas besoin d'utiliser une extension. Placez #!/bin/bashla toute première ligne du fichier , qui indique à Ubuntu le programme à utiliser pour exécuter le fichier.

  • Les commentaires commencent par #, non rem.

J'espère que cela vous aide et amusez-vous à écrire des scripts!

Je crois
la source