GNU/Linux >> Linux Esercitazione >  >> Linux

Tutorial passo passo sullo scripting della shell

In questo tutorial parleremo degli script di shell e di come creare il tuo primo script di shell. Sono chiamati script di shell in generale, ma li chiameremo script Bash perché useremo Bash tra le altre shell di Linux.

Ci sono zsh, tcsh, ksh e altre shell.

Nei post precedenti, abbiamo visto come usare la shell Bash e come usare i comandi Linux.

Il concetto di uno script Bash è eseguire una serie di comandi per portare a termine il tuo lavoro.

Per eseguire più comandi in un unico passaggio dalla shell, puoi digitarli su una riga e separarli con punto e virgola.

pwd ; whoami

Questo è uno script Bash!!

Viene prima eseguito il comando pwd, che mostra la directory di lavoro corrente, quindi viene eseguito il comando whoami per mostrare gli utenti attualmente connessi.

Puoi eseguire più comandi quanto vuoi, ma con un limite. Puoi determinare i tuoi argomenti massimi usando questo comando.

 getconf ARG_MAX

Bene, che ne dici di inserire i comandi in un file, e quando abbiamo bisogno di eseguire questi comandi, eseguiamo solo quel file. Questo è chiamato script Bash.

Innanzitutto, crea un nuovo file usando il comando touch. All'inizio di qualsiasi script Bash, dovremmo definire quale shell useremo perché ci sono molte shell su Linux, la shell Bash è una di queste.

Shebang script di shell

La prima riga che digiti quando scrivi uno script Bash è la (#!) seguita dalla shell che utilizzerai.

#! <===questo segno si chiama shebang.

#!/bin/bash

Se usi il cancelletto (#) davanti a qualsiasi riga nello script della shell, questa riga diventerà un commento, il che significa che non verrà elaborata, ma la riga sopra è un caso speciale. Questa riga definisce quale shell useremo, che è la shell Bash nel nostro caso.

I comandi della shell vengono inseriti uno per riga in questo modo:

#!/bin/bash

# This is a comment

pwd

whoami

Puoi digitare più comandi sulla stessa riga, ma devi separarli con punto e virgola, ma è preferibile scrivere comandi su righe separate; questo semplificherà la lettura in seguito.

Imposta l'autorizzazione allo script

Dopo aver scritto lo script della shell, salva il file.

Ora, imposta quel file in modo che sia eseguibile; in caso contrario, ti darà il permesso negato. Puoi rivedere come impostare i permessi usando il comando chmod.

chmod +x ./myscript

Quindi prova a eseguirlo semplicemente digitandolo nella shell:

./myscript

E sì, viene eseguito.

Crea il tuo primo script Bash

Come sappiamo da altri post, la stampa del testo non viene eseguita utilizzando il

echo

comando.

Modifica il tuo file e digita questo:

#!/bin/bash

# our comment is here

echo "The current directory is:"

pwd

echo "The user logged in is:"

whoami

Guarda l'output:

Perfetto! Ora possiamo eseguire comandi e visualizzare il testo:

echo

Se non conosci il comando echo o come modificare un file, ti consiglio di leggere gli articoli precedenti sui comandi di base di Linux.

Utilizzo delle variabili

Le variabili ti consentono di memorizzare informazioni per utilizzarle nel tuo script.

Puoi definire due tipi di variabili nello script della shell:

  • Variabili d'ambiente
  • Variabili utente

Variabili d'ambiente

A volte è necessario interagire con le variabili di sistema; puoi farlo usando le variabili di ambiente.

#!/bin/bash

# display user home

echo "Home for the current user is: $HOME"

Si noti che mettiamo la variabile di sistema $HOME tra virgolette doppie e stampa correttamente la variabile home.

E se volessimo stampare il simbolo del dollaro stesso?

echo "I have $1 in my pocket"

Poiché la variabile $ 1 non esiste, non funzionerà. Allora come superarlo?

Puoi usare il carattere di escape, che è la barra rovesciata \ prima del simbolo del dollaro in questo modo:

echo "I have \$1 in my pocket"

Adesso funziona!!

Variabili utente

Inoltre, puoi impostare e utilizzare le tue variabili personalizzate nello script.

Puoi chiamare le variabili utente allo stesso modo di questo:

#!/bin/bash

# User variables

grade=5

person="Adam"

echo "$person is a good boy, he is in grade $grade"

chmod +x myscript

./myscript

Sostituzione dei comandi

Puoi estrarre informazioni dal risultato di un comando usando la sostituzione del comando.

Puoi eseguire la sostituzione dei comandi con uno dei seguenti metodi:

  • Il carattere di apice inverso (`).
  • Il formato $().

Assicurati che quando digiti il ​​carattere di apice inverso, non sia la virgoletta singola.

Devi racchiudere il comando con due backtick come questo:

mydir=`pwd`

O nell'altro modo:

mydir=$(pwd)

Quindi lo script potrebbe essere così:

#!/bin/bash

mydir=$(pwd)

echo $mydir

Puoi memorizzare l'output del comando nella variabile mydir.

Calcolo matematico

Puoi eseguire calcoli matematici di base utilizzando il formato $(( 2 + 2 )):

#!/bin/bash

var1=$(( 5 + 5 ))

echo $var1

var2=$(( $var1 * 2 ))

echo $var2

Proprio così facile.

istruzione if-then

I tuoi script di shell avranno bisogno di istruzioni condizionali. Come se il valore è inferiore a 10, fallo altrimenti fallo. Puoi immaginare qualsiasi logica tu voglia.

La struttura più elementare dell'istruzione if-then è questa:

se comando; poi

fai qualcosa

fi

ed ecco un esempio:

#!/bin/bash

if whoami; then

	echo "It works"

fi

Dal

whoami

restituirà il mio utente in modo che la condizione restituirà true e stamperà il messaggio.

Scaviamo più a fondo e usiamo altri comandi che conosciamo.

Verifica se esiste un utente

Forse cercando un utente specifico nel file dell'utente

/etc/passwd

e se esiste un record, dimmelo in un messaggio.

#!/bin/bash

user=likegeeks

if grep $user /etc/passwd; then

	echo "No such a user $user"

fi

Usiamo il

/etc/passwd

file. Puoi controllare il nostro tutorial sul comando grep.

Se l'utente esiste, lo script della shell stamperà il messaggio.

E se l'utente non esiste? Lo script uscirà dall'esecuzione senza dirci che l'utente non esiste. OK, miglioriamo ulteriormente lo script.

istruzione if-then-else

L'istruzione if-then-else assume la seguente struttura:

se comando; poi

fai qualcosa

altro

fai un'altra cosa

fi

Se il primo comando viene eseguito e restituisce zero, il che significa successo, non eseguirà i comandi dopo l'istruzione else; in caso contrario, se l'istruzione if restituisce un valore diverso da zero; il che significa che la condizione dell'istruzione fallisce, in questo caso, la shell eseguirà i comandi dopo l'istruzione else.

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

else

	echo "The user $user doesn’t exist"

fi

Finora stiamo andando bene, continua a muoverti.

E se avessimo bisogno di altre affermazioni.

Bene, è facile, possiamo ottenerlo nidificando if affermazioni come questa:

se condizione1; poi

comandi

condizione elif2; poi

comandi

fi

Se il primo comando restituisce zero; significa successo, eseguirà i comandi dopo di esso, altrimenti se il secondo comando restituisce zero, eseguirà i comandi dopo di esso, altrimenti se nessuno di questi restituisce zero, eseguirà solo gli ultimi comandi.

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

elif ls /home; then

	echo "The user doesn’t exist"

fi

Puoi immaginare qualsiasi scenario, magari se l'utente non esiste, crea un utente usando il

useradd

comandare o fare qualsiasi altra cosa.

Combina i test

Puoi combinare più test usando il comando AND (&&) o OR (||).

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] && [ -n $name ]; then

	echo "The name exists and the folder $dir exists."

else

	echo "One test failed"

fi

Questo esempio restituirà true solo se entrambi i test hanno avuto esito positivo; in caso contrario, fallirà.

Inoltre, puoi usare OR (||) allo stesso modo:

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] || [ -n $name ]; then

	echo "Success!"

else

	echo "Both tests failed"

fi

Questo esempio restituirebbe il successo se uno o entrambi hanno avuto successo.

Fallirebbe solo se fallissero entrambi.

Confronti numerici

Puoi eseguire un confronto numerico tra due valori numerici utilizzando controlli di confronto numerico come questo:

numero1 -eq numero2 Verifica se numero1 è uguale a numero2.

numero1 -ge numero2 Controlla se numero1 è maggiore o uguale a numero2.

numero1 -gt numero2 Verifica se numero1 è maggiore di numero2.

numero1 -le numero2 Controlla se numero1 è minore o uguale a numero2.

number1 -lt number2 Verifica se numero1 è minore di numero2.

numero1 -ne numero2 Verifica se numero1 non è uguale a numero2.

Ad esempio, ne proveremo uno e il resto è lo stesso.

Nota che la dichiarazione di confronto è tra parentesi quadre come mostrato.

#!/bin/bash

num=11

if [ $num -gt 10]; then

	echo "$num is bigger than 10"

else

	echo "$num is less than 10"

fi

Il num è maggiore di dieci, quindi eseguirà la prima istruzione e stamperà la prima eco.

Confronti di stringhe

Puoi confrontare le stringhe in uno dei seguenti modi:

stringa1 =stringa2 Verifica se stringa1 è identica a stringa2.

stringa1 !=stringa2 Verifica se stringa1 non è identica a stringa2.

stringa1

stringa1> stringa2 Verifica se stringa1 è maggiore di stringa2.

-n stringa1 Controlla se stringa1 è più lunga di zero.

-z stringa1 Verifica se stringa1 è di lunghezza zero.

Possiamo applicare un confronto di stringhe al nostro esempio:

#!/bin/bash

user="likegeeks"

if [ $user = $USER ]; then

	echo "The user $user&nbsp; is the current logged in user"

fi

Una nota delicata sul maggiore e minore di per i confronti di stringhe, DEVONO essere escape con la barra rovesciata perché se usi solo il simbolo maggiore di, mostra risultati errati.

Quindi dovresti farlo così:

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Funziona, ma dà questo avviso:

./myscript: line 5: [: too many arguments

Per risolverlo, avvolgi $vals con una doppia virgoletta, costringendolo a rimanere come una stringa come questa:

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Una nota critica su maggiore e minore di per confronti di stringhe. Controlla il seguente esempio per capire la differenza:

#!/bin/bash

v1=Likegeeks

v2=likegeeks

if [ $v1 \> $v2 ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

sort myfile

come geek

Mi piace

La condizione di test considera le lettere minuscole più grandi delle lettere maiuscole.

sort

A differenza del comando di ordinamento, che fa l'opposto.

La condizione di test si basa sull'ordine ASCII.

sort

Mentre il comando di ordinamento si basa sugli ordini di numerazione dalle impostazioni di sistema.

Confronti di file

Puoi confrontare e controllare i file utilizzando i seguenti operatori:

-d mio_file Controlla se è una cartella.

-e mio_file Verifica se il file è disponibile.

-f mio_file Controlla se è un file.

-r mio_file Verifica se è leggibile.

mio_file nt my_file2 Verifica se my_file è più recente di mio_file2.

mio_file ot my_file2 Verifica se my_file è più vecchio di mio_file2.

-O mio_file Verifica se il proprietario del file e l'utente registrato corrispondono.

-G mio_file Verifica se il file e l'utente registrato hanno un gruppo identico.

Come suggeriscono, non li dimenticherai mai.

Prendiamone uno e prendiamolo come esempio:

#!/bin/bash

mydir=/home/likegeeks

if [ -d $mydir ]; then

	echo "Directory $mydir exists"

	cd $mydir

	ls

else

	echo "NO such file or directory $mydir"

fi

Non li digiteremo tutti come esempio. Basta digitare il confronto tra parentesi quadre così com'è e completare normalmente lo script.

Ci sono alcune altre funzionalità avanzate if-then, ma facciamolo in un altro post.

Questo è per ora. Spero che ti piaccia e che continui a esercitarti sempre di più.

Grazie.


Linux
  1. Descrittori di file e script di shell?

  2. Visualizzazione di contenuti di valore più elevato negli script della shell?

  3. Dovrei usare Apt o Apt-get negli script della shell?

  4. Simbolo di apice inverso (`) negli script della shell di Linux

  5. Trova e sostituisci nello scripting della shell

Bash Scripting Tutorial per principianti

Che cos'è Shebang negli script della shell di Linux?

Shell Scripting Part4 – Input, Output e Reindirizzamento

Gestione efficace dei fusi orari di Linux (esercitazione dettagliata)

Bash Scripting Introduzione Tutorial con 5 esempi pratici

Tutorial sulle funzioni di Bash Shell con 6 esempi pratici