$ bash < ex1
Peut lire
ex1programmer et exécuter
Sa forme générale est :
$ nom du script bash [paramètre]
Par exemple:
$ bash ex2 /usr/meng /usr/zhang
Le processus d'exécution est le même que la méthode précédente, mais l'avantage de cette méthode est qu'elle peut avoir des paramètres après le nom du script, transmettant ainsi les valeurs des paramètres aux commandes du programme, afin qu'un script Shell puisse gérer plusieurs situations, tout comme une fonction Lors de l'appel, les paramètres réels correspondants peuvent être transmis en fonction du problème spécifique.
Si vous démarrez avec le shell actuel (en commençant par
·signifie) pour exécuter un script Shell, vous pouvez utiliser la forme simple suivante :
$ · ex3 [paramètre]
Définissez les autorisations du script shell sur exécutable, puis exécutez-le directement à l'invite.
Méthodes spécifiques :
$ chmod a+x ex4$ ./ex4
Cette exigence spécifie le Shell spécifique qui exécute le script au début du script Shell, par exemple
/bin/bash:
#!/bin/bash
Le Shell reçoit la commande (nom du script) saisie par l'utilisateur et l'analyse. Si le fichier est marqué comme exécutable mais n'est pas un programme compilé, le shell le considère comme un script shell. Le shell lira le contenu, l’interprétera et l’exécutera. Ainsi, du point de vue de l'utilisateur, l'exécution d'un script shell est similaire à l'exécution d'un fichier exécutable classique.
Par conséquent, les scripts shell développés par l'utilisateur peuvent résider dans un répertoire sur le chemin de recherche des commandes (généralement
/bin,
/usr/binetc.), utilisez-le comme une commande normale. De cette façon, vous développez vos propres nouvelles commandes. Cette méthode est plus pratique si vous prévoyez d'utiliser le script shell préparé à plusieurs reprises.
Vous pouvez affecter le résultat de l'exécution d'une commande à une variable. Il existe deux formes de substitution de commande : l'une consiste à utiliser des guillemets pour citer la commande, sa forme générale est :
liste de commandes.
Par exemple : stockez le chemin complet du répertoire de travail actuel dans la variable dir et saisissez la ligne de commande suivante :
$ rép=`pwd`
Une autre forme est :
$(liste de commandes). La ligne de commande ci-dessus peut également être réécrite comme suit :
$dir=$(pwd)
FrapperSeuls des tableaux unidimensionnels sont fournis et la taille du tableau n'est pas limitée. Semblable au langage C, les indices des éléments du tableau sont numérotés à partir de 0. Pour obtenir des éléments dans un tableau, utilisez des indices. L'indice peut être un entier ou une expression arithmétique et sa valeur doit être supérieure ou égale à 0. Les utilisateurs peuvent utiliser des instructions d'affectation pour attribuer des valeurs aux variables du tableau.
La forme générale d'attribution de valeurs aux éléments du tableau est la suivante :
Nom du tableau [indice] = valeur,Par exemple:
$ ville[0]=Pékin$ ville[1]=Shanghai$ ville[2]=Tianjin
Peut également être utilisé
déclarerLa commande déclare explicitement un tableau, la forme générale est :
$ déclarer -un nom de tableau
Le format général de lecture des valeurs des éléments du tableau est :
${nom du tableau[indice]},Par exemple:
$ echo ${city[0]}Pékin
Chaque élément d'un tableau peut être attribué élément par élément en utilisant la méthode ci-dessus, ou il peut être attribué en combinaison. La forme générale pour définir un tableau et lui attribuer une valeur initiale est la suivante :
Nom du tableau = (valeur 1, valeur 2 ... valeur n)
Chaque valeur est séparée par des espaces. Par exemple:
$ A=(ceci est un exemple de script shell)$ echo ${A[0]} ${A[2]} ${A[3]} ${A[6]}ceci est un exemple de script$ echo ${ UNE[8]}
Puisqu'il y a 7 valeurs initiales dans la table de valeurs, donc
UNLe nombre d'éléments est également de 7.
UNE[8]Dépasse le tableau attribué
UNrange, il est considéré comme un nouvel élément puisqu’aucune valeur n’est attribuée à l’avance, sa valeur est une chaîne vide.
Si l'indice de l'élément du tableau n'est pas donné, le nom du tableau représente l'élément du tableau avec l'indice 0, tel que
villeest équivalent à
ville[0].
utiliser
*ou
@Lorsqu'ils sont en indice, tous les éléments du tableau seront remplacés.
$ echo ${A[*]} ceci est un exemple de script shell
$ écho ${#A[*]}7
Si vous souhaitez écrire un Shell pour trouver la somme de deux nombres, comment pouvez-vous l’implémenter ? Afin d'introduire l'utilisation du passage de paramètres, écrivez un script comme celui-ci :
$ cat > somme d'adlet=$1+$2echo $sum
Après avoir enregistré, exécutez :
$ chmod a+x ./ajouter$ ./ajouter 5 1015
On voit que 5 et 10 sont passés à
1 $et
2 $, il s'agit de l'ordre des paramètres prédéfinis du shell. En fait, vous pouvez également définir d'abord les variables, puis les transmettre.
Par exemple, modifiez le script ci-dessus pour obtenir :
soit somme=$X+$Yecho $somme
Exécutez à nouveau :
$ X=5 Y=10 ./ajouter15
On peut constater que les résultats corrects peuvent également être obtenus.
exporter une variable d'environnement :
$ export opid=Vrai
C'est tout. Si vous souhaitez qu'il prenne effet après vous être connecté, vous pouvez l'ajouter directement à
/etc/profilou
~/.bashrcÀ l'intérieur.
peut passer
lirePour lire une valeur de variable, par exemple, attendre que l'utilisateur saisisse une valeur et l'affiche :
$ read -p Veuillez entrer une valeur : input ; echo Vous avez entré une valeur : $input Veuillez entrer une valeur : 21500 Vous avez entré une valeur : 21500
Certaines variables Shell importantes ne doivent pas être modifiées après l'affectation, vous pouvez donc les définir sur
lecture seule:
$ oracle_home=/usr/oracle7/bin$ lecture seule oracle_home
grammaire:
expression de testRenvoie vrai si l’expression est vraie, sinon renvoie faux.
Tout d’abord, les symboles de comparaison courants utilisés dans les comparaisons numériques sont donnés :
-par exemple =; -ne !=; -gt >; -ge >= -lt <;
$ test var1 -gt var2
Le fait que le fichier soit lisible, inscriptible et exécutable dépend s'il s'agit d'un fichier ordinaire et s'il s'agit d'un répertoire :
-r; -w; -x;
$ test -r nom de fichier
La longueur de la chaîne est nulle :
-z; non nul :-n,comme:
$ test -z s1
si chaîne
s1La longueur est nulle et renvoie vrai.
égal
s1=s2; pas égals1!=s2
Il existe une autre façon de comparer des chaînes (vous pouvez les comparer par ordre lexicographique) :
$ if [[ 'abcde' < 'abcdf' ]]; then echo ouais, comme prévu, comme prévu, oui ;
Les opérations pouvant être effectuées avec cette commande sont :
Opérations arithmétiques :
+ - * / %;Opération logique:= ! < <= > >=
comme:
$ i=5;expr $i+5
en outre,
avant JCest une calculatrice en ligne de commande qui peut effectuer certains calculs arithmétiques.
siExemple de commande : si le premier paramètre est un nom de fichier commun, imprimez le fichier en pages ; sinon, s'il s'agit d'un nom de répertoire, entrez le répertoire et imprimez tous les fichiers du répertoire. S'il ne s'agit pas d'un répertoire, invitez-le. informations pertinentes.
if test -f $1then pr $1>/dev/lp0elif test-d $1then (cd $1;pr *>/dev/lp0)sinon echo $1 n'est ni un fichier ni un répertoirefi
casLa commande est une commande de branchement multidirectionnelle basée sur la correspondance de modèles. Ce qui suit déterminera quel ensemble de commandes sera exécuté ensuite en fonction de la saisie au clavier de l'utilisateur.
while [ $reply!=y ] && [ $reply!=Y ] #L'instruction de boucle que nous allons apprendre ci-dessous fait écho nVoulez-vous continuer ?(O/N)c lire la réponse #Lire le cas du clavier $replay in ( y|Y) break;; #Quitter la boucle (n|N) echo nnTerminationn exit 0;; *) echo nnVeuillez répondre y ou n continuer #Retourner directement à la boucle interne et commencer; continuer l'esacdone
grammaire:
pendant/jusqu'à la liste de commandes 1do liste de commandes 2done
La différence est qu'après l'exécution du tableau de commandes 1, si l'état de sortie est zéro, exécutez
faireLa liste de commandes 2 suivante reviendra alors au point de départ, et après que cette dernière ait exécuté la liste de commandes 1, elle n'effectuera des opérations similaires que si l'état de sortie est différent de zéro. Même exemple que ci-dessus.
grammaire:
pour le nom de la variable dans la table de chaînes, faites la table de commandes terminée
Exemple:
FILE=test1.c monfichier1.f pccn.hfor i dans $FILEdo cd ./tmp cp $i $i.old echo $idone copié
Jetons maintenant un coup d'œil à l'utilisation des fonctions dans Shell. Regardons d'abord un exemple : écrivez une fonction, puis appelez-la pour l'afficher.
Bonjour le monde!
$ cat > show# Définition de la fonction function show{ echo $1$2;}H=Hello,W=World!# Appelez la fonction et transmettez deux paramètres H et Wshow $H $W
Démo :
$ chmod 770 show$./showBonjour, le monde !
Avez-vous vu quelque chose de louche ?
$ afficher $H $W
Nous pouvons suivre directement le nom de la fonction avec les paramètres réels.
L'ordre des paramètres réels correspond aux "paramètres virtuels"
1 $, 2 $, 3 $…
Remarque : Si vous souhaitez transmettre un paramètre, que devez-vous faire s'il y a des espaces au milieu du paramètre ? Essayez-le d'abord.
afficher
Bonjour le monde(Il y a un espace entre les deux mots)
function show{ echo $1}HW=Bonjour Worldshow $HW
Si directement
afficher $HW, ce n'est certainement pas possible, car
1 $Seulement reçu
Bonjour, donc les résultats montrent seulement
Bonjour, la raison est que les variables chaîne doivent être utilisées Contenez-le.
Si vous êtes intéressé, continuez à apprendre !
De nombreuses choses puissantes vous attendent, comme
couper,
expression,
sed,
embarrassantetc.