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


Dans Windows, je peux écrire un fichier contenant des commandes pour cmd (généralement .cmd ou .bat des dossiers). Lorsque je clique sur ces fichiers, il s'ouvre cmd.exe et exécutez-les commandes que le fichier contient.

Comment pourrais-je le faire dans Ubuntu?

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

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

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


93
2017-11-30 02:56


origine




Réponses:


Il existe deux méthodes.

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

#!/bin/bash

Enregistrez ensuite le fichier. Marquer ensuite comme exécutable en utilisant chmod +x file

Ensuite, lorsque vous cliquez (ou exécutez le fichier depuis le terminal), les commandes seront exécutées. Par convention, ces fichiers n’ont généralement pas d’extension, mais vous pouvez les terminer par .sh ou de toute autre manière.

Quelques notes:

  • N'importe quel fichier (et je veux dire n'importe quel) peut être exécuté sous Linux à condition que la première ligne soit un chemin vers le programme qui doit interpréter le fichier. Les exemples courants incluent /bin/python, /bin/sh, /bin/dash, mais même les choses étranges fonctionnent comme /bin/mysql
  • Bash est une langue complète. Il est beaucoup plus complexe que cmd.exe dans Windows. Il dispose d'un langage de programmation puissant qui prend en charge les fonctions, les boucles, les conditions, les opérations de chaîne, etc.
  • Ces documents peut 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 en 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 seconde méthode consiste à enregistrer des commandes en utilisant script. Courir script alors juste faire des trucs. Quand vous avez fini de faire des choses exit et script va générer un fichier pour vous avec tout ce que vous avez fait. Ceci est moins utilisé mais fonctionne assez bien pour créer des choses comme des macros. man script pour plus d'informations.


124
2017-11-30 03:18



Vous voudrez peut-être changer cela /bin/bash à /bin/sh, bash n'est même pas la valeur par défaut pour Ubuntu. - TC1
@ TC1 Il est installé par défaut, peu importe si c'est la valeur par défaut ou non. - Carlos Campderrós
Je tiens à souligner que /bin/dash (lequel /bin/sh est généralement lié à), est beaucoup plus rapide que bash (j'ai mesuré environ 15 fois plus vite). Si possible, utilisez /bin/dash pour les scripts shell :) - MiJyn
J'obtiens 'commande not found' même après chmod - Elia Weiss
Si votre dans le même dossier que le fichier assurez-vous de ./file.sh - coteyr


L'équivalent aux fichiers de commandes Windows est des scripts shell, et un excellent guide de démarrage est Bash Scripting.

Pour la plupart, les commandes que vous pouvez saisir 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 y en a 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>, ne pas <filename>

  • Les noms de variables sont $<varname>, ne 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 .sh ou (plus habituel) vous n'avez pas besoin d'utiliser une extension. Mettre #!/bin/bash sur la toute première ligne du fichier, qui indique à Ubuntu quel programme utiliser pour exécuter le fichier.

  • Les commentaires commencent par #, ne pas rem.

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


14
2017-11-30 03:14





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

touch file

Cette méthode créera simplement un fichier, mais si le fichier existe déjà, il modifie simplement la date de modification au moment où vous avez utilisé cette commande.

echo "text" > file

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

echo "" > file

Supposons que vous souhaitiez y écrire plus d’une ligne et que vous ne vouliez pas utiliser des milliers de lignes. echo commandes, vous utiliseriez cette commande:

cat << EOF > file
test
test1
foo
bar
EOF

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

test
test1
foo
bar

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

J'espère que cela t'aides!


MODIFIER: Oh, je vois, donc vous écrivez le fichier dans gedit, en utilisant le .sh extension (facultatif, mais c'est une bonne idée), puis sur un gestionnaire de fichiers, cliquez avec le bouton droit sur le fichier, sélectionnez Propriétés-> Autorisations et vérifiez Allow executing file as program. Ensuite, vous pouvez double-cliquer dessus et le lancer :). De plus, si vous voulez le faire dans le terminal, vous pouvez exécuter cette commande pour la rendre exécutable (vous pouvez ajouter une sudo s'il ne vous appartient pas):

chmod +x file

Et pour courir:

./file

13
2017-11-30 03:00



En fait, ce que je veux faire, c'est écrire un fichier, par exemple gedit, qui contient les commandes du terminal. Ensuite, lorsque je double-clique sur ce fichier, il lance ces commandes dans le terminal. - Seth♦
Vérifiez ma réponse mise à jour :) - MiJyn
Bonne réponse, mise à jour prévenante. Pour créer simplement un fichier, j'ai toujours utilisé touch filename - TryTryAgain
@TryTryAgain, oui 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, n'hésitez pas. Merci - TryTryAgain