Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was bedeutet der Linux-Befehl sh?

Was bedeutet der Linux-Befehl sh?

藏色散人
藏色散人Original
2023-04-12 11:15:2411427Durchsuche

linux-Befehl sh ist der Befehl zum Ausführen der Shell unter Linux und der Interpreter der Shell. Das Shell-Skript ist die Shell- und Befehlszeilenschnittstelle in Linux verschiedene Aufgaben ausführen.

Was bedeutet der Linux-Befehl sh?

# 🎜 🎜#Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

Was bedeutet der Linux-Befehl sh?

Kurzbeschreibung des Linux-Befehls sh

1. Mögliche Ausführungsmethoden

Wie man .sh-Dateien unter Linux ausführt

#🎜🎜 Die # Die .sh-Datei ist eine Textdatei. Wenn Sie sie ausführen möchten, müssen Sie chmod a+x xxx.sh verwenden, um ausführbare Berechtigungen zu erteilen.

2. Beginn: #!/bin/sh

Das Shell-Programm muss mit „#!/bin/sh“ beginnen. # in der Shell bedeutet im Allgemeinen einen Kommentar, daher denken viele Leute, dass „#!“ auch ein Kommentar ist, aber tatsächlich ist es kein Kommentar.

"#!/bin/sh" ist eine Deklaration der Shell, die angibt, welche Art von Shell Sie verwenden und welchen Pfad sie verwendet.

#!/bin/ bedeutet, dass dieses Skript .bin/sh zur Ausführung verwendet.

#! ist eine spezielle Kennung, gefolgt vom Pfad der Shell, die dieses Skript interpretiert. Wenn nicht deklariert, wird das Skript in der Standard-Shell ausgeführt, die die Standard-Shell ist, in der sich der Benutzer befindet Das System ist für die Ausführung von Shell-Skripten definiert. Wenn das Skript für die Ausführung in Kornshell ksh geschrieben ist und das standardmäßig ausgeführte Shell-Skript C-Shell-csh ist, schlägt die Ausführung des Skripts wahrscheinlich fehl. Daher wird jedem empfohlen, „#!/bin/sh“ als Hauptfunktion der C-Sprache zu betrachten, die beim Schreiben einer Shell

notwendig ist, um das Shell-Programm strenger zu machen .

3. Variablen

Variablen müssen in anderen Programmiersprachen verwendet werden. Bei der Shell-Programmierung bestehen alle Variablen aus Zeichenfolgen und es ist

nicht erforderlich, Variablen zu deklarieren. Um einer Variablen einen Wert zuzuweisen, können Sie so schreiben:

#!/bin/sh
 #对变量赋值:
 a=”hello world”# 现在打印变量a的内容:
 echo “A is:” echo $a
Manchmal werden Variablennamen leicht mit anderen Wörtern verwechselt, wie zum Beispiel:

 num=2
 echo “this is the $numnd”
Das wird nicht ausgedruckt „this is the 2nd“, gibt aber nur „this is the“ aus, da die Shell nach dem Wert der Variablen numnd sucht, diese Variable jedoch keinen Wert hat. Daher können Sie geschweifte Klammern verwenden, um der Shell mitzuteilen, dass wir die Num-Variable drucken möchten:

 num=2
 echo “this is the ${num}nd”
Dadurch wird „das ist der 2.“

#🎜 ausgegeben 🎜##🎜 🎜#4. Shell-Befehle und Prozesssteuerung

Sie können die folgenden Befehle in Shell-Skripten verwenden:

Unix-Befehle# 🎜🎜##🎜 🎜#Obwohl jeder Unix-Befehl in einem Shell-Skript verwendet werden kann, gibt es dennoch einige relativ häufig verwendete Befehle. Diese Befehle werden normalerweise für Datei- und Textoperationen verwendet.

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

Konzept: Pipe, Redirect und Backtick (Backslash)

pipeline | Verwenden Sie die Ausgabe eines Befehls als Eingabe eines anderen Befehls.
grep "hello" file.txt | wc -l
Der obige Code wird ausgedrückt als: Suchen Sie in file.txt nach Zeilen, die „Hallo“ enthalten, und zählen Sie die Anzahl der Zeilen. Hier wird die Ausgabe des grep-Befehls als Eingabe des wc-Befehls verwendet.

Es ist zu beachten, dass der Befehl nach der Pipeline ein Unterbefehl ist und nicht im nächsten Befehl erscheint (ein bisschen wie C++ innerhalb von {} und {} Externe Zuweisung), wie zum Beispiel der folgende Befehl:
    #!/bin/shecho 1 2 3 | { read a b c ; echo $a $b $c ; } # 打印结果为: 1 2 3echo $a $b $c # 打印结果为空
    1. | 将一个命令的输出作为另外一个命令的输入。
     find . -mtime  -1  -type  f  -print

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

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

     #!/bin/sh
     # The ticks are backticks (`) not normal quotes (‘):
     tar -zcvf  lastmod.tar.gz `find . -mtime -1 -type f -print`
    1. 重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
      >写入文件并覆盖旧文件
      >>追加到文件的尾部,保留旧文件内容。

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

     if ….; then
     …. elif ….; then
     …. else
     …. fi #注意是以fi结尾

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

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

    流程控制

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

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

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

    while
    whileRedirect: Leiten Sie den Befehl um. Ergebnisse werden ausgegeben in eine Datei statt in die Standardausgabe (den Bildschirm).

    >Schreiben Sie die Datei und

    überschreiben Sie die

    alte Datei.

    >> Hängen Sie an das Ende der Datei an und behalten Sie die alte Datei bei Inhalt.
    Anti-Bindestrich"`": Verwenden Sie Anti-Bindestrich, um

    die Ausgabe eines Befehls zu #🎜🎜 #As ein Befehlszeilenargument

    für einen anderen Befehl.

 [ -f "somefile" ] #判断文件是否存在
 [ -d "testResults/" ] #判断目录testResults/是否存在
 [ -x "/bin/ls" ] #判断/bin/ls文件是否存在并有可执行权限
 [ -n "$var" ] #判断$var变量是否有值
 [ "$a" = "$b" ] #判断$a和$b是否相等
Die obige Anweisung wird verwendet, um Dateien zu finden, die in den letzten 24 Stunden geändert wurden (-mtime -2 bedeutet die letzten 48 Stunden). Wenn Sie alle gefundenen Dateien packen möchten, können Sie das Linux-Skript verwenden:
  [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”

Process Control #🎜 🎜#if

if Ausdruck, wenn die Bedingung wahr ist, führen Sie den Teil nach then aus:

 #!/bin/sh
 mailfolder=/var/spool/mail/james [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; } #感觉这里的‘’应该是||
 echo “$mailfolder has mail from:” grep “^From ” $mailfolder
#🎜🎜 #In In den meisten Fällen können Sie Testbefehle verwenden, um Bedingungen zu testen. Sie können beispielsweise Zeichenfolgen vergleichen, feststellen, ob Dateien vorhanden sind und ob sie lesbar sind usw. Die Syntaxstruktur der while-Schleife lautet:

rrreee #🎜🎜#Dieser Befehl kann mit Pipelines verwendet werden, wie zum Beispiel: #🎜🎜#rrreee #🎜🎜##🎜🎜#Testbedingung #🎜🎜## 🎜🎜# Verwenden Sie normalerweise #🎜🎜# „[ ]“ #🎜🎜#, um Testbedingungen darzustellen. Beachten Sie, dass die Leerzeichen hier sehr wichtig sind. #🎜🎜# Stellen Sie sicher, dass in den eckigen Klammern Leerzeichen #🎜🎜# vorhanden sind. #🎜🎜#rrreee #🎜🎜##🎜🎜#Abkürzungsoperator#🎜🎜##🎜🎜# Denjenigen, die mit der C-Sprache vertraut sind, könnte der Ausdruck gefallen: #🎜🎜#rrreee #🎜🎜#hier#🎜🎜#"&& " #🎜🎜# ist ein Abkürzungsoperator. Wenn der Ausdruck links wahr ist, wird die Anweisung rechts ausgeführt. Natürlich kann der obige Ausdruck auch als UND-Verknüpfung in logischen Operationen betrachtet werden. #🎜🎜##🎜🎜#Die gleiche Operation #🎜🎜# „|| #🎜🎜# ist auch in der Shell-Programmierung verfügbar: #🎜🎜#
 #!/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视频教程

Das obige ist der detaillierte Inhalt vonWas bedeutet der Linux-Befehl sh?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn