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.
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
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.
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.
. Pour attribuer une valeur à une variable, vous pouvez écrire comme ceci :
#!/bin/sh #对变量赋值: a=”hello world”# 现在打印变量a的内容: echo “A is:” echo $a
num=2 echo “this is the $numnd”
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”
De cette façon, "c'est le 2ème" sera imprimé
echo "some text" #将文字内容打印在屏幕上 ls #文件列表 cp sourcefile destfile #文件拷贝 mv oldname newname #重命名文件或移动文件 rm file #删除文件 grep 'pattern' file #在文件内搜索字符串,如:grep 'searchstring' file.txt cat file.txt #输出文件内容到标准输出设备(屏幕)上 read var #显示用户输入,并将输入赋值给变量
|
Utiliser la sortie d'une commande comme entrée d'une autre commande.
grep "hello" file.txt | wc -l
{}
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 # 打印结果为空
上述代码表示为:在 file.txt 中搜索包含有 “hello” 的行并计算其行数。在这里grep命令的输出作为wc命令的输入。
需要注意的是,管道后的命令是子命令,并不会出现在接下来的命令中(有点像C++在{}
内和{}
外赋值的区别),如以下命令:
find . -mtime -1 -type f -print
重定向
:将命令的结果输出到文件,而不是标准输出(屏幕)。
>写入文件并覆盖旧文件
>>追加到文件的尾部,保留旧文件内容。
反短横线“`”:使用反短横线可以将一个命令的输出作为另一个命令的一个命令行参数。
#!/bin/sh # The ticks are backticks (`) not normal quotes (‘): tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
上述语句用来查找过去24小时(-mtime -2则表示过去48小时)内修改过的文件。如果想将所有查找到的文件打一个包,则可以使用一下linux脚本:
if ….; then …. elif ….; then …. else …. fi #注意是以fi结尾
ifif
表达式,如果条件为真则执行then
后面的部分:
# expression 1# while循环:当expresssion成立的时候,执行cmdwhile (expresssion)do cmddone# expression 2,可以直接使用truewhile true(或 :)do cmddone
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件时都存在以及是否可读等等…
whilewhile
# 寻找 ${path} 路径下唯一首字母为‘E’的子目录,并 cd 到该目录find ${path}/E* -type d | while read corresp_pathdo cd ${corresp_path}done
Redirect
: Afficher les résultats de la commande dans un fichier au lieu de la sortie standard (écran).
écrasezl'ancien fichier>
Anti-dash"`": utilisez l'anti-dash pour convertir
enun paramètre de ligne de commanded'une autre commande.
[ -f "somefile" ] #判断文件是否存在 [ -d "testResults/" ] #判断目录testResults/是否存在 [ -x "/bin/ls" ] #判断/bin/ls文件是否存在并有可执行权限 [ -n "$var" ] #判断$var变量是否有值 [ "$a" = "$b" ] #判断$a和$b是否相等
[ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”
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
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
该脚本首先判断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!