From 26dbb1edbbeb81ca691d87430851309fe85f8390 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 20 May 2023 00:02:27 +0800 Subject: [PATCH] R MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @cyberwaddle 感谢您,完成了第一篇翻译贡献! --- ...ow to Get Started with Shell Scripting in Linux.md | 122 +++++++++++------- 1 file changed, 77 insertions(+), 45 deletions(-) diff --git a/translated/tech/20221015.1 ⭐️⭐️ How to Get Started with Shell Scripting in Linux.md b/translated/tech/20221015.1 ⭐️⭐️ How to Get Started with Shell Scripting in Linux.md index 76e01c4221..98985d7e54 100644 --- a/translated/tech/20221015.1 ⭐️⭐️ How to Get Started with Shell Scripting in Linux.md +++ b/translated/tech/20221015.1 ⭐️⭐️ How to Get Started with Shell Scripting in Linux.md @@ -3,113 +3,142 @@ [#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/" [#]: collector: "lkxed" [#]: translator: "cyberwaddle" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " -如何在 Linux 中开始 Shell 脚本的编写 - +如何入门 Linux Shell 脚本编写 ====== -各位读者,我们将在本文中介绍如何在 Linux 或 UNIX 系统中开始 Shell 脚本的编写。 +![][0] -##### 什么是 Shell 呢? +> 各位读者,我们将在本文中介绍如何在 Linux 或 UNIX 系统中入门 Shell 脚本编写。 -Shell 是类 UNIX/Linux 操作系统中的解释器。它将用户输入的命令解释成操作系统的系统调用来执行这些命令。简单来说 Shell 表现为 OS 的外部包装样式。比如,你可能使用 Shell 命令来列出目录中的文件,如[ls command][1],或使用命令复制,如 cp。 +### 什么是 Shell 呢? + +Shell(交互界面)是类 UNIX/Linux 操作系统中的一个解释器。它将用户输入的命令解释成操作系统的系统调用来执行这些命令。简单来说,Shell 形式上是操作系统的包装。比如,你可能使用 Shell 命令来列出目录中的文件,如 [ls][1] 命令,或使用命令复制,如 `cp` 命令。 ``` -$ ls Desktop Documents Downloads Music Pictures playbook.yaml Public snap Templates test5 Videos $ +$ ls +Desktop Documents Downloads Music Pictures playbook.yaml Public snap Templates test5 Videos ``` -在上方的例子中,当你输入 ls 并按下回车键。$ 符号是 shell 的提示符,意味着 shell 等着命令的输入。其余的内容就是当前目录下的文件名。 +在上方的例子中,当你输入 `ls` 并按下回车键。`$` 符号是 Shell 的提示符,意味着 Shell 等着命令的输入。下面的一行就是当前目录下的文件名。 -##### 什么是 Shell 提示符? +### 什么是 Shell 提示符? -由 shell 定义,$ 提示符被称作命令提示符(这个不清楚哪来的概念,可能有误。请参看:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Controlling-the-Prompt)。当提示符出现后(此处提示符并不特指 $ 符号),你就可以输入命令。Shell 将会在你按下回车键后读取你的输入。它会通过查看你输入的第一个单词来确定你希望执行的命令。单词指的是一组连续的字符。空格和制表符作为分割单词的标志。 +提示符,即 `$`,被称作命令提示符,是由 Shell 发出的(LCTT 译注:这个概念,可能有误。请参看:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Controlling-the-Prompt)。当提示符出现后(LCTT 译注:此处提示符并不特指 `$` 符号),你就可以输入命令了。Shell 将会在你按下回车键后读取你的输入。它会通过查看你输入的第一个单词来确定你希望执行的命令。“单词”指的是一组连续的字符。空格和制表符作为分割单词的标志。 -### 不同类型的 Shells +### 不同类型的 Shell -由于 shell 是没有垄断的,你可以按照自己的意愿来自由选择运行任何一种 shell。一切都挺好的,但是在不清楚其它选项的情况下选择一种 shell 没有多大益处。下面列出了一些 UNIx/Linux 下常见的 shell。 +由于没有限制只能有一个 Shell,你可以按照自己的意愿来自由选择运行任何一种 Shell。这当然挺好的,但是在不清楚其它替代方案的情况下选择一种 Shell 没有多大益处。下面列出了一些 UNIx/Linux 下常见的 Shell。 -##### The Bourne Shell +#### Sh(Bourne Shell) -最初的 Unix Shell 通常被称作 sh,是 shell 或 Bourne shell 的简写,以作者 Steven Bourne 命名。在几乎所有的类 UNIX 操作系统下都可以获取到。基础的 Bourne shell 仅支持相当有限的命令行编辑。你可以输入字符,使用退格键删除字符,还有就是按下回车键来执行命令。当命令行出现异常了,你可以按下 Ctrl-C 组合键来终止整个命令。 +最初的 Unix Shell 通常被称作 Sh,是 Shell(或 Bourne Shell)的简写,以其作者 Steven Bourne 命名。它在几乎所有的类 UNIX 操作系统下都可以找到。基本的 Bourne Shell 仅支持相当有限的命令行编辑。你可以输入字符,使用退格键删除字符,还有就是按下回车键来执行命令。当命令行出现异常了,你可以按下 `Ctrl-C` 组合键来终止整个命令。 -##### The C Shell +#### Csh(C Shell) -它是由加利福尼亚大学伯克利分校的 Bill Joy 设计的,由于它的语法和 C 语言极其相似所以被命名为 C Shell。这种 shell 在 Bourne shell 的基础上增加了一些实用功能,尤其是可以重用之前的命令来帮助建立将要执行的命令。因为当你去完成一项专门任务的时候,大多数的情况下需要执行不止一条命令,这样 C shell 的能力就相当有用了。 +它是由加利福尼亚大学伯克利分校的 Bill Joy 设计的,由于它的语法和 C 语言相似,所以被命名为 C Shell。这种 Shell 在 Bourne shell 的基础上增加了一些实用功能,尤其是可以重用之前的命令来帮助创建之后要执行的命令。当你去完成一项专门任务的时候,大多数的情况下需要执行不止一条命令,这样 C shell 的能力就相当有用了。 -##### The Korn Shell +#### Ksh(Korn Shell) -它是由贝尔实验室的 David Korn 实现的,Korn Shell 或 ksh 提供了和 C Shell 相同的增强,其中有一项重要的不同:Korn Shell 提供了旧 Bourne shell 语法的向后兼容。在 Unix 下,如 AIX&HP-UX Korn Shell 是默认 shell。 +它是由贝尔实验室的 David Korn 创造的,Korn Shell 提供了和 C Shell 相同的增强,其中有一项重要的不同:Korn Shell 提供了对旧的 Bourne Shell 语法的向后兼容。在 Unix 下,如 AIX & HP-UX 上,Korn Shell 是默认 Shell。 -##### Bash (The Bourne Again Shell) +#### Bash(Bourne Again Shell) -Bash 提供了像 Korn Shell 一样的命令行编辑,像 C Shell 一样的文件名补全和许多其它的高级功能。许多用户将 Bash 视作集 Korn 和 C Shell 的有点于一身。在 Linux 和 Mac OS X 系统下,Bash 是默认的 shell。 +Bash 提供了像 Korn Shell 一样的命令行编辑,像 C Shell 一样的文件名补全和许多其它的高级功能。许多用户认为 Bash 集 Korn Shell 和 C Shell 的优点于一身。在 Linux 和 Mac OS X 系统下,Bash 是默认的 Shell。 -##### tcsh ( The T C Shell) +#### Tcsh(T C Shell) -Linux 系统推广了 Tcsh。Tcsh 扩展了传统的 csh,增加了命令行编辑,文件名补全和其它功能。例如,当你按下 Tab 键后,Tcsh 会补全文件和目录名(与 Bash 中相同的按键)。旧的 C Shell 就不支持这项功能。 +Linux 系统推广了 Tcsh。Tcsh 扩展了传统的 csh,增加了命令行编辑、文件名补全和其它功能。例如,当你按下 `Tab` 键后,Tcsh 会补全文件和目录名(与 Bash 中的按键相同)。旧的 C Shell 不支持这项功能。 ### 什么是 Shell 脚本呢? -Shell 脚本是包含一条或多条命令的文本文件。在 shell 脚本中,shell 程序假定文本文件的每一行是一条不同的命令。这些命令的大部分就和你在 Shell 窗口手动输入的一样。 +Shell 脚本是包含一条或多条命令的文本文件。在 Shell 脚本中,Shell 程序假定文本文件的每一行是一条不同的命令。这些命令的大部分就和你在 Shell 窗口手动输入的一样。 -##### 为什么要实用 Shell 脚本呢? +#### 为什么要使用 Shell 脚本呢? -Shell 脚本是用来自动化管理任务,简化复杂的配置细节并且充分运用操作系统的性能的。有了联合不同命令的能力就可以创造新命令了,从而增加操作系统的价值。此外,shell 与图形化桌面环境结合时你就可以两全其美了(这里作者指的是什么,不太清楚)。 +Shell 脚本被用来自动化管理任务、简化复杂的配置细节,并且充分运用操作系统的性能。有了组合不同命令的能力就可以创造新命令了,从而增加操作系统的价值。此外,结合使用 Shell 与图形化桌面环境,可以兼得二者之长。 -从系统管理员的角度看,日复一日的重复工作可以使用 shell 脚本来实现自动处理那就可以节约时间去做精细活了。 +从系统管理员的角度看,日复一日的重复工作可以使用 Shell 脚本来实现自动处理,那就可以节约时间从事其它高质量的工作。 -##### 创建第一个 shell 脚本 +### 创建第一个 Shell 脚本 -在当前工作目录下创建一个名为 myscript.sh 的文本文件,所有的 shell 脚本都有”.sh”的扩展(Linux 下根本没有扩展名一说,没有这个扩展一样是可以执行的)。脚本的第一行是 #!/bin/sh 或 #!/bin/bash ,因为 # 符号被称作 hash 并且 ! 符号被称作 bang 故被称为 shebang。至于 /bin/sh & /bin/bash 则指出了命令将被 sh 还是 bash shell 执行。 +在当前工作目录下创建一个名为 `myscript.sh` 的文本文件,所有的 Shell 脚本都有 `.sh` 的扩展名(LCTT 译注:Linux 下根本没有扩展名一说,没有这个扩展一样是可以执行的)。脚本的第一行是 `#!/bin/sh` 或 `#!/bin/bash`,因为 `#` 符号被称作 “hash” 并且 `!` 符号被称作 “bang” 故被称为 shebang(释伴)。至于 `/bin/sh` 和 `/bin/bash` 则指出了命令将被 Sh 还是 Bash shell 执行。 -一下就是 myscript.sh 的内容 +以下就是 `myscript.sh` 的内容: ``` -#!/bin/bash # Written by LinuxTechi echo echo "Current Working Directory: $(pwd)" echo echo "Today' Date & Time: $(date)" DISK=$(df -Th) echo echo "Disk Space on System:" echo "$DISK" +#!/bin/bash +# Written by LinuxTechi +echo +echo "Current Working Directory: $(pwd)" +echo +echo "Today' Date & Time: $(date)" +DISK=$(df -Th) +echo +echo "Disk Space on System:" +echo "$DISK" ``` -上方的脚本将会展示当前工作目录,今天的日期与时间,还有磁盘空间。我们需要用到[echo command][2] 和其它 [linux commands][3] 来实现这个脚本。 +上方的脚本将会展示当前工作目录、今天的日期与时间,还有磁盘空间。我们需要用到 [echo 命令][2] 和其它 [Linux 命令][3] 来实现这个脚本。 -使用如下命令来给文件增加执行权限 [chmod command][4] +使用如下的 [chmod 命令][4] 来给文件增加执行权限: ``` $ chmod a+x myscript.sh ``` -现在来执行脚本。 +现在来执行脚本: ``` -$ sh myscript.sh or $ ./myscript.sh +$ sh myscript.sh +或 +$ ./myscript.sh ``` -注意:在当前目录下执行当前目录下的 shell 脚本,使用 ./<脚本名> 如下所示, +注意:在当前目录下执行当前目录下的 Shell 脚本,须使用 `./<脚本名>` 方式,如下所示: -输出, +![][4a] -##### 在 shell 脚本中获取用户输入 +#### 在 Shell 脚本中获取用户输入 -read 命令是用来获取用户的键盘输入并且将之赋值给一个变量。echo 命令是用来展示内容的。 +`read` 命令用来获取用户的键盘输入,并且将之赋值给一个变量。`echo` 命令用来展示内容。 -让我们更改上方的脚本以使之获取输入, +让我们更改上方的脚本以使之获取输入: ``` -#!/bin/bash # Written by LinuxTechi read -p "Your Name: " NAME echo echo "Today' Date & Time: $(date)" echo read -p "Enter the file system:" DISK echo "$(df -Th $DISK)" +#!/bin/bash +# Written by LinuxTechi +read -p "Your Name: " NAME +echo +echo "Today' Date & Time: $(date)" +echo +read -p "Enter the file system:" DISK +echo "$(df -Th $DISK)"" ``` -现在,再执行脚本试试,这回应该会有输入信息的提醒。 +现在,再执行脚本试试,这回应该会有输入信息的提醒: ``` -$ ./myscript.sh Your Name: Pradeep Kumar Today' Date & Time: Sat 15 Oct 05:32:38 BST 2022 Enter the file system:/mnt/data Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/volgrp01-lv01 ext4 14G 24K 13G 1% /mnt/data $ +$ ./myscript.sh +Your Name: Pradeep Kumar + +Today' Date & Time: Sat 15 Oct 05:32:38 BST 2022 + +Enter the file system:/mnt/data +Filesystem Type Size Used Avail Use% Mounted on +/dev/mapper/volgrp01-lv01 ext4 14G 24K 13G 1% /mnt/data ``` -完美,上方的输出表明脚本有输入提醒并加工处理了相应的数据。 +![][4b] + +完美,上方的输出表明脚本有输入提醒,并加工处理了相应的数据。 本文结束。希望对你是有用的。非常欢迎任何的疑问、反馈。 -推荐阅读: [How to Debug a Bash Shell Script in Linux][5] +*(题图:MJ/f83b771e-a70d-4c62-a169-ec42e9004a14)* -------------------------------------------------------------------------------- @@ -118,7 +147,7 @@ via: https://www.linuxtechi.com/get-started-shell-scripting-linux/ 作者:[Pradeep Kumar][a] 选题:[lkxed][b] 译者:[cyberwaddle](https://github.com/cyberwaddle) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -128,4 +157,7 @@ via: https://www.linuxtechi.com/get-started-shell-scripting-linux/ [2]: https://www.linuxtechi.com/echo-command-examples-in-linux/ [3]: https://www.linuxtechi.com/20-linux-commands-interview-questions-answers/ [4]: https://www.linuxtechi.com/chmod-command-examples-in-linux/ +[4a]: https://www.linuxtechi.com/wp-content/uploads/2014/03/shell-script-contents-linux.png?ezimgfmt=ng:webp/ngcb22 +[4b]: https://www.linuxtechi.com/wp-content/uploads/2014/03/Input-Read-Shell-Script-Examples.png?ezimgfmt=ng:webp/ngcb22 [5]: https://www.linuxtechi.com/debugging-shell-scripts-in-linux/ +[0]: https://img.linux.net.cn/data/attachment/album/202305/19/235745hz7r48umu1eerm2e.jpg \ No newline at end of file