# head -n -3 /etc/passwd --Lors de la lecture d'un fichier, supprimez les trois dernières lignes du fichier
# tail -n +28 /etc/passwd -- Lire toutes les lignes à partir de la ligne 28 jusqu'à la fin du fichier
# tail -f /etc/passwd -- Suivre les modifications du contenu à la fin du fichier Couramment utilisé pour observer les modifications dans les fichiers journaux
# set -. o history --Activer la fonction d'historique des commandes, enregistrée par défaut Dans le fichier ~/.bash_history
Remarque : Les trois variables suivantes sont utilisées pour contrôler le nombre d'historiques de commandes et s'il faut enregistrer les horodatages
# vim /etc/bashrc -- Généralement configuré dans ce fichier, le niveau utilisateur peut être configuré dans ~/.bashrc
HISTTIMEFORMAT='[%Y-%m- %d %H:%M:%S] ' --Format d'horodatage de l'historique des commandes
export HISTSIZE HISTFILESIZE HISTTIMEFORMAT -- Définissez-les comme variables d'environnement
# .
--Ce qui précède est également un script d'exécution non standard, et le fichier de script n'a pas besoin d'autorisations exécutables ; ce qui suit est une exécution standard :
# head -n 1 test.sh
#!/bin /bash
# chmod a+x test.sh
# ./test.sh
Vous pouvez directement mettre le script dans le chemin PATH et utilisez-le directement comme commande Exécutez
Remarque : Le shell doit commencer par #!, prononcé comme sha-bang. le type de fichier. #! est utilisé pour indiquer au système que ce fichier Le contenu à l'intérieur sera interprété à l'aide de l'interpréteur spécifié et la chaîne après #! Si la ligne sha-bang n'est pas fournie, le shell actuel en devinera une, mais il n'est pas garanti que les résultats soient cohérents avec les attentes, il est donc préférable de la spécifier explicitement ; Le processus en cours d'exécution de ./test.sh :
1. Le noyau lit le script, vérifie la marque du type de fichier et obtient le chemin d'interprétation
2 , le noyau exécute l'interpréteur ;
3. Une fois l'interpréteur exécuté, ouvrez le fichier de script et expliquez son exécution
De nombreux interprètes fournis avec Linux : #!/bin / bash; #!/bin/sh; #!/usr/bin/perl; #!/bin/awk
2. 🎜 >
+ - * /
$(()) $[] expr let
# echo $( ( 38%5)) --Prendre le reste
# echo $[38/5] --Trouver le quotient
# echo $((10**2)) --Le carré de 10
2.1, expr
#expr 14 % 9 --Reste
#expr 34/9 --Trouver le quotient
# expr 30 * 3 --Lors de l'utilisation du signe de multiplication, sa signification spécifique doit être masquée par une barre oblique inverse
# expr index "sarasara" a --Capturer la position où se trouvent le premier caractère et la première chaîne numérique apparaît
# expr substr "this est un test" 3 5 -- Saisissez la chaîne
# expr length "this est un test" -- Calculez la longueur de la chaîne
2.2. let
let l'outil de calcul est utilisé pour exécuter une ou plusieurs expressions. Il n'est pas nécessaire d'ajouter $ pour représenter les variables dans le calcul des variables. Si l'expression contient des espaces ou d'autres caractères spéciaux, elle doit être citée
# no=20
# let no++ --increment
# let no-- --decrease
# let no+=10 --increment 10
# let no=no+10 --Idem que ci-dessus
# let no-=15 --diminuer de 15
# let a=5+4 --change There il n'est pas nécessaire d'ajouter le symbole $
# echo $a
3. Fichier de configuration du Shell
/etc/profile -- fichier de configuration global. ,
/etc/bashrc --Fichier de configuration global, généralement utilisé pour définir les changements d'environnement
~/.bash_profile --Fichier de configuration utilisateur
~/.bashrc -- Fichier de configuration utilisateur
~/.bash_logout -- fichier de configuration utilisateur, le fichier sera lu à la sortie du shell de connexion
Type de shell
Selon Les méthodes de démarrage des shells sont différentes. Les shells peuvent être grossièrement divisés dans les types suivants :
shell de connexion - connectez-vous via l'interface texte, tel que su - ; Le fichier de configuration du shell est le suivant :
/etc/profile——~/.bash_profile——~/.bashrc——/etc/bashrc
Shell interactif - -Le shell par défaut dans gnome-terminal ; read L'ordre de prise des fichiers de configuration du shell est le suivant :
~/.bashrc - /etc/bashrc
non -interactive shell --shell utilisé pour exécuter des scripts
4.1 Définir une variable v dans ~/.bashrc, exigeant que la variable apparaisse uniquement dans le shell interactif
.
# vim ~/.bash_profile --identify shell Indique s'il faut se connecter au shell
LOGINSHELL=1
# vim ~/.bashrc --Définissez la variable uniquement lorsque vous l'êtes ne pas se connecter au shell
if [ "$LOGINSHELL" != 1 ] ;then
v="shell interactif uniquement"
fi
5. Priorité des commandes
Alias> Commandes internes>
6. Caractères spéciaux du shell
Pour le shell, certains caractères ont des significations particulières en plus de leur propre signification s'ils doivent être inclus dans une chaîne. contient des caractères spéciaux, la signification particulière de ces caractères spéciaux doit être supprimée par des guillemets. Voici quelques caractères spéciaux :
~ --S'il n'est pas cité, il sera remplacé par le répertoire personnel du shell
& -- Mettez le programme en arrière-plan et exécutez
$ --symbole dollar, qui peut être utilisé pour l'expansion des paramètres
${} -- traitement des variables, qui peut être utilisé pour l'expansion des paramètres. Le contenu de la variable peut être remplacé, supprimé, extrait, etc.
* -- Astérisque, caractère générique, correspond à tous les caractères
? --Point d'interrogation, caractère générique, correspond à n'importe quel caractère
() --groupe de commandes
{} --command group
"" --guillemets doubles, guillemets ; peut supprimer la signification particulière de la plupart des caractères spéciaux, à l'exception de $;`;!; sauf
'' --guillemet simple, guillemet peut supprimer la signification particulière de tous ; caractères spéciaux, sauf lui-même
--Équivalent à la commande source ; peut être utilisé pour définir des fichiers cachés ; lorsqu'il est utilisé pour les noms de répertoire, il représente le répertoire actuel
/ --slash, séparateur de chemin, répertoire racine
--La barre oblique inverse peut être utilisée pour supprimer la signification particulière d'un seul caractère, qui est le ainsi- appelé "escape". Il peut également être utilisé pour représenter des caractères spéciaux, tels que la nouvelle ligne (n)
`` -- Les backticks, les commandes sont exécutées en premier et ont la même signification que $(); s'il y a une imbrication, vous ne pouvez pas utiliser le `` symbole
$(()) et $[] --operators
: --empty command
; --command Split ; ne considère pas le résultat de l'exécution de la commande précédente
; -Option de fin de cas
# --Comment
&& --Logique ET peut diviser la commande mais le résultat de la précédente ; la commande doit être prise en compte
|| --Les commandes OU logiques peuvent être divisées ; il n'est pas nécessaire de considérer le résultat de l'exécution de la commande précédente
------- --- ----------------------------------------------- --- ---
# echo 'hello world;' "hello world;" -- Utilisez trois types de références pour correspondre à la signification particulière de la suppression des espaces
3. Variables
1. Variables locales
Variables personnalisées par l'utilisateur actuel ; , d'autres processus ou enfants du processus actuel Le processus n'est pas valide
# a=123
# echo $a
# unset a --annuler la définition modifiée
2. Variables d'environnement
Le processus actuel est valide et peut être appelé par les processus enfants
# env - Afficher toutes les variables d'environnement du système actuel ;
# set - Afficher tous les environnements du système actuel Variables et variables temporaires
# echo $PATH -- Afficher le contenu de la variable PATH
# export hi=hello --Définir les variables d'environnement ; pendant le travail, j'aime généralement changer l'environnement prêt à l'emploi Plusieurs variables d'environnement courantes dans ~/.bash_profile
:
. PATH -- Recherche des commandes affectant
PS1 -- Invite de commandes
TMOUT -- délai d'expiration, l'unité est S, lorsque le temps est écoulé, le shell interactif se ferme automatiquement ; il est préférable de le définir comme variable en lecture seule# declare -r TMOUT=60
HISTSIZE, HISTFILESIZE, HISTTIMEFORMAT --Historique des commandes
3. Les variables système
sont également appelées variables intégrées dans bash ; le shell lui-même a Quelques variables fixes
$# --Le nombre de paramètres suivis du script
$* --Tous les paramètres suivant le script (s'ils sont inclus entre guillemets doubles, ils seront affichés sous forme de chaîne)
$@ --Tous les paramètres après le script (inclus dans les doubles guillemets ou conserver les limites de chaque paramètre)
$? --Le statut renvoyé après l'exécution de la commande précédente
$$ --Le numéro de processus du processus en cours
$! --Le dernier numéro de processus exécuté en arrière-plan
!$ --La dernière commande ou paramètre
--L'historique de la dernière commande
$0 --Le nom du programme ou le processus du programme actuel
$1~$n --Variable de paramètre de position
#!/bin/bash
echo "$0 = $0"
écho "$# = $#"
écho "$* = $*"
écho "$1 = $2"
écho "$7 = $7"
echo "$11 = ${11}"
# chmod a+x test.sh
# ./test.sh a b c
4. Définition des variables
a. Par défaut, il n'y a aucune exigence pour les types de variables. Vous pouvez attribuer n'importe quelle valeur à la variable, mais il ne peut y avoir d'espace de chaque côté du signe égal
b. Les noms de variables sont sensibles à la casse
c. ou des symboles spéciaux
d. Enregistrez le résultat de l'exécution de la commande dans la variable
5. Appelez la variable
# a=$(hostname. )
# A =123456789
# echo $A
# echo ${A:2:3>
6. 🎜>
Définition d'un tableau : utilisez des parenthèses pour définir un tableau, et les éléments entre parenthèses sont séparés par des espaces
# array[0]=var1
# array[ 1]=var2
# array[2]=var3
# array=(var1 var2 var3) --Égal aux trois lignes ci-dessus, définissez le tableau
# echo ${array[0]} --take La première valeur du tableau
# echo ${array[*]} --obtenir toutes les valeurs du tableau
# echo ${array[@]} --identique à ci-dessus
7. declare définit les variables typées
-i -- traite les variables comme des entiers
-r -- définit les variables en lecture seule
-x -- Exporter les variables vers des variables d'environnement
-a -- Traiter les variables comme des tableaux
8. lire de manière interactive définir les variables
-p - -Message rapide
-n --Nombre de caractères
-t --Délai d'expiration
-s --Ne pas afficher
4. Alias
L'alias de la commande, comme son nom l'indique, signifie que la commande peut être exécutée sous un autre nom. Il est généralement utilisé pour simplifier la saisie d'une commande, ou pour ajouter des paramètres à la commande, ou simplement pour ajouter plusieurs noms d'accès à la commande.
# alias cp mv rm -- Vérifiez si les trois commandes cp, mv et rm sont des alias
# unalias rm -- Supprimez l'alias rm
# alias cdyum = 'cd /data/yum' -- Saisie simplifiée
# alias rm='rm -i' -- Ajouter des paramètres à la commande
-- Généralement l'alias est dans le fichier de configuration ~/.bashrc
défini dans un alias pwd
# function pwd() { echo "this est une fonction" } -- Créer une fonction pwd
# pwd -- Exécutez pwd et constatez que la sortie est un alias
# unalias pwd --Supprimez l'alias, exécutez à nouveau pwd et constatez que la sortie est le contenu de la fonction
# unset pwd --Supprimez la fonction et exécutez à nouveau pwd, et le chemin actuel de la sortie est
Donc : Alias> Commande interne>
5. Jugement conditionnel
#test vim
------------------- ---si [condition];alors
commande.. .
fi
----------------------
si [condition];alors
commande...
else
commande...
fi
---------------- ------
si [Condition 1];alors
commande1...
elif [Condition 2];puis
commande2. ..
else
commande3...
fi
------------------ ----
si [Condition 1];alors
commande1...
si [Condition 2];alors
commande2...
fi
else
if [Condition 3];puis
commande3...
elif [Condition 4];puis
commande4...
else
commande5...
fi
fi
6. Test de jugement
test == [ juge ]
1. >
# vim test.sh
#!/bin/bash
if test -e $1;then --s'il existe;également -p;-c;-b;-L
if [ -f $1 ];then --Utilisez [ juger ] pour remplacer
if test -f $1;then --s'il existe et s'il s'agit d'un fichier normal
if test -d $1;then --s'il existe et s'il s'agit d'un répertoire
if test -S $1;then --si il existe et est un socket File
echo 'YES'
fi
# chmod a+x test.sh
# ./ test.sh [chemin]
2 Jugement lié aux autorisations de fichier
-r;-w;-x -- s'il y a des autorisations de lecture, d'écriture et d'exécution. autorisations
-u --S'il y a suid
-g --S'il y a sgid
-k --S'il y a t bit
-s --Qu'il s'agisse d'un fichier vierge, -s signifie Pas vide ;! -s Fichier vide
3. Jugement de chaîne
= --Si égal, c'est vrai Il doit y avoir des espaces des deux côtés du signe égal, c'est possible. être également : ==
!= --true si différent
-z string--true si la longueur de la chaîne est nulle
-n string-- longueur de la chaîne Vrai sinon zéro
if test $num1 = $num2;then
if [ $num1 = $num2 ];then
if [ -n $num1 ];then
4 Jugement numérique
-eq -- égal à true
-ne -- Vrai si non égal à
-gt -- Vrai si supérieur à
-ge -- Vrai si supérieur ou égal à
-lt --Vrai si inférieur à
-le --Vrai si inférieur ou égal à
if test $[num1] -eq $[num2];alors
if [ $[num1] -eq $[num2] ];alors
5. Jugement logique
-a et && - ET logique
-o et || - OU logique
! --Non
Priorité : with>or>Non
if test -e $1 -o -e $2;then -- Détermine si un fichier existe
if [ -e $1 -o -e $2 ];then -- Comme ci-dessus
if test ! -e $1 -o -e $2;then --Juger que les deux fichiers n'existent pas en même temps
if [ ! -e $1 -o -e $2 ];then -- Comme ci-dessus