Que signifie la commande Linux sh ?

藏色散人
Libérer: 2023-04-12 11:15:24
original
11416 Les gens l'ont consulté

La commande Linux sh est la commande permettant d'exécuter le shell sous Linux et est l'interpréteur du shell. Le script shell est l'interface shell et de ligne de commande sous Linux. Les utilisateurs peuvent saisir des commandes dans le script shell pour effectuer diverses tâches.

Que signifie la commande Linux sh ?

L'environnement d'exploitation de ce tutoriel : système Linux5.9.8, ordinateur Dell G3.

Que signifie la commande Linux sh ?

Une brève introduction à la commande Linux sh

1. Méthodes d'exécution possibles

Méthodes pour exécuter des fichiers .sh sous Linux

Les fichiers .sh sont des fichiers texte Si vous souhaitez les exécuter, vous devez utiliser chmod a+x xxx.sh pour donner un exécutable. autorisations.

2. Début : #!/bin/sh

Le programme shell doit commencer par "#!/bin/sh". # dans le shell signifie généralement un commentaire, donc beaucoup de gens pensent que "#!" est aussi un commentaire, mais en fait ce n'est pas le cas.

"#!/bin/sh" est une déclaration du shell, indiquant le type de shell que vous utilisez et son chemin.

#!/bin/ signifie que ce script utilise .bin/sh pour s'exécuter.

#! est un identifiant spécial, suivi du chemin du shell qui interprète ce script. S'il n'est pas déclaré, le script sera exécuté dans le shell par défaut est défini par le système où se trouve l'utilisateur pour s'exécuter. scripts shell. , si le script est écrit pour s'exécuter dans Kornshell ksh et que le script shell en cours d'exécution par défaut est C shell csh, le script est susceptible d'échouer pendant l'exécution. Par conséquent, il est recommandé à tout le monde de traiter "#!/bin/sh" comme la fonction principale du langage C. Il est indispensable lors de l'écriture d'un shell de rendre le programme shell plus rigoureux.

3. VariablesLes variables doivent être utilisées dans d'autres langages de programmation. Dans la programmation shell, toutes les variables sont composées de chaînes, et

aucune déclaration de variables n'est requise

. Pour attribuer une valeur à une variable, vous pouvez écrire comme ceci :

#!/bin/sh
 #对变量赋值:
 a=”hello world”# 现在打印变量a的内容:
 echo “A is:” echo $a
Copier après la connexion
Parfois, les noms de variables sont facilement confondus avec d'autres mots, tels que :

 num=2
 echo “this is the $numnd”
Copier après la connexion

Cela n'imprime pas "c'est le 2ème", mais affiche uniquement "c'est le " , car le shell recherchera la valeur de la variable numnd, mais cette variable n'a aucune valeur. Par conséquent, vous pouvez utiliser des accolades pour indiquer au shell que ce que nous voulons imprimer est la variable num :

 num=2
 echo “this is the ${num}nd”
Copier après la connexion

De cette façon, "c'est le 2ème" sera imprimé

4. Vous pouvez utiliser les commandes suivantes dans les scripts shell :

Commandes Unix

Bien que n'importe quelle commande Unix puisse être utilisée dans un script shell, il existe des commandes relativement plus couramment utilisées. Ces commandes sont généralement utilisées pour les opérations sur les fichiers et le texte. Tels que :

 echo "some text" #将文字内容打印在屏幕上
 ls #文件列表
 cp sourcefile destfile #文件拷贝
 mv oldname newname #重命名文件或移动文件
 rm file #删除文件
 grep 'pattern' file #在文件内搜索字符串,如:grep 'searchstring' file.txt
 cat file.txt #输出文件内容到标准输出设备(屏幕)上
 read var #显示用户输入,并将输入赋值给变量
Copier après la connexion


Concept : pipe, redirection et backtick (backslash)

Pipe | Utiliser la sortie d'une commande comme entrée d'une autre commande.
grep "hello" file.txt | wc -l
Copier après la connexion

Le code ci-dessus est exprimé comme suit : recherchez les lignes contenant "bonjour" dans le fichier.txt et comptez le nombre de lignes. Ici, la sortie de la commande grep est utilisée comme entrée de la commande wc.
  1. Il est à noter que la commande après le pipeline est une sous-commande et n'apparaîtra pas dans la commande suivante (un peu comme le C++ entre {} et {} La différence entre affectation externe), comme la commande suivante : | 将一个命令的输出作为另外一个命令的输入。
#!/bin/shecho 1 2 3 | { read a b c ; echo $a $b $c ; } # 打印结果为: 1 2 3echo $a $b $c # 打印结果为空
Copier après la connexion

上述代码表示为:在 file.txt 中搜索包含有 “hello” 的行并计算其行数。在这里grep命令的输出作为wc命令的输入。

需要注意的是,管道后的命令是子命令,并不会出现在接下来的命令中(有点像C++在{}内和{}外赋值的区别),如以下命令:

 find . -mtime  -1  -type  f  -print
Copier après la connexion
  1. 重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
    >写入文件并覆盖旧文件
    >>追加到文件的尾部,保留旧文件内容。

  2. 反短横线 “`”:使用反短横线可以将一个命令的输出作为另一个命令的一个命令行参数

 #!/bin/sh
 # The ticks are backticks (`) not normal quotes (‘):
 tar -zcvf  lastmod.tar.gz `find . -mtime -1 -type f -print`
Copier après la connexion

上述语句用来查找过去24小时(-mtime -2则表示过去48小时)内修改过的文件。如果想将所有查找到的文件打一个包,则可以使用一下linux脚本:

 if ….; then
 …. elif ….; then
 …. else
 …. fi #注意是以fi结尾
Copier après la connexion

流程控制

if
if 表达式,如果条件为真则执行 then 后面的部分:

# expression 1# while循环:当expresssion成立的时候,执行cmdwhile (expresssion)do
  cmddone# expression 2,可以直接使用truewhile true(或 :)do 
	cmddone
Copier après la connexion

大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件时都存在以及是否可读等等

while
while

# 寻找 ${path} 路径下唯一首字母为‘E’的子目录,并 cd 到该目录find ${path}/E* -type d | while read corresp_pathdo
	cd ${corresp_path}done
Copier après la connexion

    Redirect : Afficher les résultats de la commande dans un fichier au lieu de la sortie standard (écran).

    > Écrivez dans le fichier et

    écrasez l'ancien fichier >
    Anti-dash "`" : utilisez l'anti-dash pour convertir

    la sortie d'une commande

    en un paramètre de ligne de commande d'une autre commande.

 [ -f "somefile" ] #判断文件是否存在
 [ -d "testResults/" ] #判断目录testResults/是否存在
 [ -x "/bin/ls" ] #判断/bin/ls文件是否存在并有可执行权限
 [ -n "$var" ] #判断$var变量是否有值
 [ "$a" = "$b" ] #判断$a和$b是否相等
Copier après la connexion
L'instruction ci-dessus est utilisée pour rechercher les fichiers modifiés au cours des dernières 24 heures (-mtime -2 signifie les dernières 48 heures). Si vous souhaitez regrouper tous les fichiers trouvés, vous pouvez utiliser le script Linux :

  [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”
Copier après la connexion
Process control

if

if expression, Si la condition est vrai, exécutez la partie après then : 🎜
 #!/bin/sh
 mailfolder=/var/spool/mail/james [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; } #感觉这里的‘’应该是||
 echo “$mailfolder has mail from:” grep “^From ” $mailfolder
Copier après la connexion
Copier après la connexion
🎜Dans la plupart des cas, vous pouvez utiliser la commande test pour tester la condition. Par exemple, vous pouvez 🎜 comparer des chaînes, déterminer si des fichiers existent et sont lisibles, etc. 🎜...🎜🎜🎜while🎜🎜while La structure syntaxique de la boucle est : 🎜rrreee 🎜Cette commande peut être utilisé avec des pipelines, tels que : 🎜rrreee 🎜🎜Condition de test 🎜🎜 Utilisez généralement 🎜 "[ ]" 🎜 pour représenter la condition de test. Notez que les espaces ici sont très importants, 🎜assurez-vous qu'il y a des espaces entre crochets🎜. 🎜rrreee 🎜🎜Opérateur de raccourci🎜🎜 Si vous êtes familier avec le langage C, vous aimerez peut-être cette expression : 🎜rrreee 🎜Ici🎜"&&"🎜 est un opérateur de raccourci. Si l'expression de gauche est vraie, l'énoncé de droite. sera exécuté. Bien entendu, l’expression ci-dessus peut également être considérée comme l’opération ET dans les opérations logiques. 🎜🎜La même opération OU 🎜 "||" 🎜 est également disponible en programmation shell : 🎜
 #!/bin/sh
 mailfolder=/var/spool/mail/james [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; } #感觉这里的‘’应该是||
 echo “$mailfolder has mail from:” grep “^From ” $mailfolder
Copier après la connexion
Copier après la connexion

该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的”From” 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:
◆打印错误信息
◆退出程序
我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。
不用‘与’和‘或’操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。

推荐学习:《linux视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal