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.