Come posso creare un file di script per i comandi del terminale?


114

In Windows posso scrivere un file contenente i comandi per cmd (solitamente .cmdo .batfile). Quando clicco su quei file si aprirà cmd.exeed eseguirò i comandi che il file contiene.

Come lo farei in Ubuntu?

Sono sicuro che questo è un duplicato, ma non riesco a trovare la mia risposta.
È simile a queste domande, ma non rispondono alla domanda:

Memorizza i comandi del terminale utilizzati di frequente in un file

Emulatore CMD.exe in Ubuntu per eseguire il file .cmd / .bat

Risposte:


150

Esistono due metodi.

Innanzitutto, il più comune è scrivere un file, assicurarsi che sia la prima riga

#!/bin/bash

Quindi salva il file. Quindi contrassegnalo come eseguibile usandochmod +x file

Quindi quando fai clic (o esegui il file dal terminale) i comandi verranno eseguiti. Per convenzione questi file di solito non hanno estensione, tuttavia puoi farli finire in .shqualsiasi altro modo.

Alcune note:

  • Qualsiasi (e intendo qualsiasi) file può essere eseguito in Linux a condizione che la prima riga sia un percorso del programma che dovrebbe interpretare il file. Alcuni esempi includono /bin/python, /bin/sh, /bin/dash, ma anche cose strane sfere funzionano come/bin/mysql
  • Bash è una lingua completa. È di gran lunga più complesso di cmd.exe in Windows. Ha un forte linguaggio di programmazione che supporta funzioni, loop, condizionali, operazioni su stringhe, ecc.
  • Questi documenti possono essere utili in caso di problemi.
  • Se non si desidera rendere eseguibile il file, è possibile eseguirlo passandolo come argomento a bash: bash file/to/run.sh

Un semplice esempio di Bash

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

Il secondo metodo è registrare i comandi usando script. Esegui scriptquindi fai solo cose. Quando hai finito di fare cose tipo exite script genererà un file per te con tutte le "cose" che hai fatto. Questo è meno usato ma funziona abbastanza bene per creare cose come le macro. man scriptper maggiori informazioni.


Potresti volerlo cambiare /bin/bashin /bin/sh, bash non è nemmeno il valore predefinito per Ubuntu.
— TC1,

@ TC1 È installato per impostazione predefinita, quindi non importa se è predefinito o meno.
— Carlos Campderrós,

1
Vorrei sottolineare che /bin/dash(che di /bin/shsolito è collegato a symlink), è molto più veloce di bash (ho misurato circa 15 volte più velocemente). Se possibile, utilizzare /bin/dashper gli script di shell :)
— MiJyn,

4
Se sei nella stessa cartella del file assicurati di ./file.sh
— coteyr

1
Ho provato entrambi i metodi, ma se provo a fare doppio clic sul file di script bash, si apre il file di testo in geany / gedit pronto per la modifica. Vorrei che lo script venisse eseguito con un doppio clic. Questa domanda contiene maggiori dettagli su ciò che voglio fare.
— thymaro,

15

Intendi scrivere su un file usando uno script di shell? Ecco alcuni modi:

touch file

Questo metodo creerà semplicemente un file, ma se il file esiste già, cambia semplicemente la data di modifica all'ora in cui hai usato quel comando.

echo "text" > file

Tale metodo sovrascrive il contenuto di filea text. Se desideri cancellare un file, puoi semplicemente fare questo:

echo "" > file

Supponi di voler scrivere più di una riga e di non utilizzare migliaia di echocomandi, dovresti usare questo comando:

cat << EOF > file
test
test1
foo
bar
EOF

Ciò consente di scrivere più righe in un solo comando. Il contenuto di filesarebbe quindi questo:

test
test1
foo
bar

Se si desidera aggiungere un file, sostituirlo >con >>.

Spero che sia di aiuto!


EDIT : Oh, capisco, quindi scriveresti il ​​file in gedit, usando l' .shestensione (opzionale, ma è una buona idea), e poi su un file manager, fai clic destro sul file, seleziona Proprietà-> Autorizzazioni e controlla Allow executing file as program. Quindi puoi fare doppio clic su di esso e verrà eseguito :). Inoltre, se vuoi farlo nel terminale, puoi eseguire questo comando per renderlo eseguibile (potresti voler anteporre sudose non ti appartiene):

chmod +x file

E per eseguire:

./file

In realtà quello che voglio fare è scrivere un file, diciamo gedit, che contenga comandi terminali. Quindi, quando faccio doppio clic su questo file, verranno eseguiti quei comandi nel terminale.
— Seth,

Ottima risposta, aggiornamento premuroso. Per creare semplicemente un file, l'ho sempre usatotouch filename
— Try TryAgain

@ TryTryAgain, sì, è un metodo semplice, probabilmente più veloce di echo "" > file. Va bene se includo quel metodo nella mia risposta?
— MiJyn,

@MiJyn Includilo assolutamente, sentiti libero. Grazie
— Try TryAgain

Come posso farlo funzionare in qualsiasi punto del terminale ... come un comando globale?
— Omer,

14

L'equivalente dei file batch di Windows sono gli script di shell e un'eccellente guida introduttiva è Bash Scripting .

Per la maggior parte, i comandi che è possibile immettere dalla riga di comando possono essere inseriti in uno script di shell.

Un paio di cose che sono diverse dai file batch di Windows:

  • Esistono diversi interpreti di comandi, chiamati shell. L'impostazione predefinita è bash, ma se sei interessato, ce ne sono altri, come zsh, ksh, dash, perl, python, ecc.

  • Per eseguire uno script di shell, è necessario rendere eseguibile il file, che è possibile eseguire chmod +x <filename>

  • In Ubuntu, la directory corrente non è il percorso di ricerca del programma, quindi è necessario eseguire ./<filename>, no<filename>

  • I nomi delle variabili sono $<varname>, non%<varname>%

  • I comandi in uno script di shell non vengono stampati per impostazione predefinita, come in un file batch.

  • L'estensione del nome file può essere .sho (più abituale) non è necessario utilizzare un'estensione. Posiziona #!/bin/bashla prima riga del file , che indica a Ubuntu quale programma utilizzare per eseguire il file.

  • I commenti iniziano con #, no rem.

Spero che questo aiuti e divertiti a scrivere!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.