<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Bash - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Bash - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 18 May 2026 10:23:34 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/bash/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Bash 脚本教程——Linux Shell 脚本和命令行入门教程 ]]>
                </title>
                <description>
                    <![CDATA[ 在 Linux 中，流程自动化在很大程度上依赖于 shell 脚本。这涉及到创建一个包含一系列命令的文件，这些命令可以一起执行。 在本文中，我们将从 bash 脚本编写的基础知识开始，包括变量、命令、输入/输出和调试。我们还会通过示例来学习每个知识点。 让我们开始吧。🚀 目录  1. 前提条件  2. 简介  * Bash 脚本的定义  * Bash 脚本的优点  * Bash Shell 和命令行界面的概述  3. 如何开始 Bash 脚本编写  * 如何从命令行运行 Bash 命令  * 如何创建和执行 Bash 脚本  4. Bash 脚本基础知识  * ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/bash-scripting-tutorial-linux-shell-script-and-command-line-for-beginners/</link>
                <guid isPermaLink="false">66b22ce179db950405c05254</guid>
                
                    <category>
                        <![CDATA[ Bash ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Thu, 19 Dec 2024 11:18:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2024/08/Copy-of-Cast-a-Function-in-SQL---Convert-Char-to-Int-SQL-Server-Example.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/bash-scripting-tutorial-linux-shell-script-and-command-line-for-beginners/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Bash Scripting Tutorial – Linux Shell Script and Command Line for Beginners</a>
      </p><!--kg-card-begin: markdown--><p>在 Linux 中，流程自动化在很大程度上依赖于 shell 脚本。这涉及到创建一个包含一系列命令的文件，这些命令可以一起执行。</p>
<p>在本文中，我们将从 bash 脚本编写的基础知识开始，包括变量、命令、输入/输出和调试。我们还会通过示例来学习每个知识点。</p>
<p>让我们开始吧。🚀</p>
<h2 id="">目录</h2>
<ol>
<li><a href="#pre-requisites">前提条件</a></li>
<li><a href="#introduction">简介</a></li>
</ol>
<ul>
<li><a href="#definition-of-bash-scripting">Bash 脚本的定义</a></li>
<li><a href="#advantages-of-bash-scripting">Bash 脚本的优点</a></li>
<li><a href="#overview-of-bash-shell-and-command-line-interface">Bash Shell 和命令行界面的概述</a></li>
</ul>
<ol start="3">
<li><a href="#how-to-get-started-with-bash-scripting">如何开始 Bash 脚本编写</a></li>
</ol>
<ul>
<li><a href="#how-to-run-bash-commands-from-the-command-line">如何从命令行运行 Bash 命令</a></li>
<li><a href="#how-to-create-and-execute-bash-scripts">如何创建和执行 Bash 脚本</a></li>
</ul>
<ol start="4">
<li><a href="#bash-scripting-basics">Bash 脚本基础知识</a></li>
</ol>
<ul>
<li><a href="#comments-in-bash-scripting">Bash 脚本中的注释</a></li>
<li><a href="#variables-and-data-types-in-bash">Bash 中的变量和数据类型</a></li>
<li><a href="#input-and-output-in-bash-scripts">Bash 脚本中的输入和输出</a></li>
<li><a href="#basic-bash-commands-echo-read-etc-">基本的 Bash 命令（echo、read 等）</a></li>
<li><a href="#conditional-statements-if-else-">条件语句（if/else）</a></li>
</ul>
<ol start="5">
<li><a href="#looping-and-branching-in-bash">Bash 中的循环和分支</a></li>
</ol>
<ul>
<li><a href="#while-loop">while 循环</a></li>
<li><a href="#for-loop">for 循环</a></li>
<li><a href="#case-statements">case 语句</a></li>
</ul>
<ol start="6">
<li><a href="#how-to-schedule-scripts-using-cron">如何使用 cron 调度脚本</a></li>
<li><a href="#how-to-debug-and-troubleshoot-bash-scripts">如何调试和排除 Bash 脚本的故障</a></li>
<li><a href="#conclusion">总结</a></li>
</ol>
<ul>
<li><a href="#resources-for-learning-more-about-bash-scripting">学习更多关于 Bash 脚本的资源</a></li>
</ul>
<h2 id="pre-requisites">前提条件</h2>
<p>为了跟随本教程的进度，你应具备以下条件：</p>
<ul>
<li>可以访问命令行的 Linux 运行版本。</li>
</ul>
<p>如果你没有安装 Linux 或者你是初学者，你可以通过 <a href="https://replit.com/~">Replit</a> 很容易访问 Linux 命令行。Replit 是一个基于浏览器的 IDE，你可以在几分钟内访问 bash shell。</p>
<p>你也可以通过 WSL（Windows Subsystem for Linux）在你的 Windows 系统上安装 Linux。<a href="https://www.freecodecamp.org/news/how-to-install-wsl2-windows-subsystem-for-linux-2-on-windows-10/">这里</a> 有一个相关教程。</p>
<h2 id="introduction">简介</h2>
<h3 id="definition-of-bash-scripting">Bash 脚本的定义</h3>
<p>Bash 脚本是一个包含一系列命令的文件，这些命令由 bash 程序逐行执行。它允许你通过命令行执行一系列操作，如导航到特定目录、创建文件夹和启动进程。</p>
<p>通过将这些命令保存在脚本中，你可以多次重复相同的操作，并通过运行脚本执行它们。</p>
<h3 id="advantages-of-bash-scripting">Bash 脚本的优点</h3>
<p>Bash 脚本是一种强大且灵活的工具，可以用于自动化系统管理任务、管理系统资源以及在 Unix/Linux 系统中执行其他例行任务。Shell 脚本的一些优点包括：</p>
<ul>
<li><strong>自动化</strong>：Shell 脚本允许你自动化重复性任务和过程，节省时间并减少手动执行时可能出现的错误。</li>
<li><strong>可移植性</strong>：Shell 脚本可以在各种平台和操作系统上运行，包括 Unix、Linux、macOS，甚至通过使用模拟器或虚拟机在 Windows 上运行。</li>
<li><strong>灵活性</strong>：Shell 脚本高度可定制，可以轻松修改以满足特定需求。它们还可以与其他编程语言或实用程序结合，创建更强大的脚本。</li>
<li><strong>易访问性</strong>：Shell 脚本易于编写，不需要任何特殊工具或软件。它们可以使用任何文本编辑器进行编辑，并且大多数操作系统都有内置的 shell 解释器。</li>
<li><strong>集成</strong>：Shell 脚本可以与其他工具和应用程序集成，如数据库、Web 服务器和云服务，从而实现更复杂的自动化和系统管理任务。</li>
<li><strong>调试</strong>：Shell 脚本易于调试，大多数 shell 都内置调试和错误报告工具，可以帮助快速识别和修复问题。</li>
</ul>
<h3 id="overview-of-bash-shell-and-command-line-interface">Bash Shell 和命令行界面的概述</h3>
<p>"Shell" 和 "bash" 这两个术语可以互换使用。但两者之间有细微的区别。</p>
<p>"Shell" 这个术语是指提供命令行界面以与操作系统交互的程序。Bash（Bourne-Again SHell）是最常用的 Unix/Linux shell 之一，并且是许多 Linux 发行版中的默认 shell。</p>
<p>Shell 或命令行界面看起来是这样的：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-135.png" alt="image-135" width="600" height="400" loading="lazy"></p>
<p>Shell 接收用户的命令并显示输出。</p>
<p>在上述输出中，<code>zaira@Zaira</code> 是 shell 提示符。当 shell 以交互方式使用时，在等待用户命令时会显示一个 <code>$</code>。</p>
<p>如果 shell 以 root（具有管理权的用户）身份运行，提示符会变为 <code>#</code>。超级用户 shell 提示符看起来是这样的：</p>
<pre><code class="language-bash">[root@host ~]#
</code></pre>
<p>Bash 是 shell 的一种，还有其他 shell 可供使用，如 Korn shell（ksh）、C shell（csh）和 Z shell（zsh）。每种 shell 都有自己的语法和功能，但它们都有一个共同的目的，那就是提供一个命令行界面来与操作系统交互。</p>
<pre><code class="language-bash">ps
</code></pre>
<p>这是我的输出结果：</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/03/image-134.png" alt="检查 shell 类型，我使用的是 bash shell" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>检查 shell 类型，我使用的是 bash shell</figcaption>
</figure>
<p>总结一下，“shell” 是指任何提供命令行界面的程序的一个广泛术语，“Bash” 是一种特定类型的 shell，在 Unix/Linux 系统中广泛使用。</p>
<p>注意：在本教程中，我们将使用 “bash" shell。</p>
<h2 id="how-to-get-started-with-bash-scripting">如何开始编写 Bash 脚本</h2>
<h3 id="how-to-run-bash-commands-from-the-command-line">从命令行运行 Bash 命令</h3>
<p>如前所述，shell 提示符看起来像这样：</p>
<pre><code class="language-bash">[username@host ~]$
</code></pre>
<p>你可以在 <code>$</code> 符号后输入任何命令，并在终端上看到输出。</p>
<p>通常，命令遵循以下语法：</p>
<pre><code>command [选项] 参数
</code></pre>
<p>让我们讨论一些基本的 bash 命令并查看它们的输出。确保跟着做哦 :)</p>
<ul>
<li><code>date</code>：显示当前日期</li>
</ul>
<pre><code class="language-bash">zaira@Zaira:~/shell-tutorial$ date
Tue Mar 14 13:08:57 PKT 2023
</code></pre>
<ul>
<li><code>pwd</code>：显示当前工作目录。</li>
</ul>
<pre><code class="language-bash">zaira@Zaira:~/shell-tutorial$ pwd
/home/zaira/shell-tutorial
</code></pre>
<ul>
<li><code>ls</code>：列出当前目录的内容。</li>
</ul>
<pre><code class="language-bash">zaira@Zaira:~/shell-tutorial$ ls
check_plaindrome.sh  count_odd.sh  env  log  temp
</code></pre>
<ul>
<li><code>echo</code>：打印一段文本或变量的值到终端。</li>
</ul>
<pre><code class="language-bash">zaira@Zaira:~/shell-tutorial$ echo "Hello bash"
Hello bash
</code></pre>
<p>你可以始终使用 <code>man</code> 命令查看命令手册。</p>
<p>例如，<code>ls</code> 的手册看起来像这样：</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/03/image-138.png" alt="你可以使用 `man` 命令详细查看命令的选项" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>你可以使用 `man` 命令详细查看命令的选项</figcaption>
</figure>
<h3 id="how-to-create-and-execute-bash-scripts">如何创建和执行 Bash 脚本</h3>
<h4 id="">脚本命名约定</h4>
<p>按照惯例，bash 脚本以 <code>.sh</code> 结尾。然而，即使没有 <code>sh</code> 扩展名，bash 脚本也可以正常运行。</p>
<h4 id="shebang">添加 Shebang</h4>
<p>Bash 脚本以 <code>shebang</code> 开头。Shebang 是 <code>bash #</code> 和 <code>bang !</code> 的组合，后跟 bash shell 路径。这是脚本的第一行。Shebang 告诉 shell 通过 bash shell 执行它。Shebang 指向 bash 解释器的绝对路径。</p>
<p>以下是 shebang 语句的示例。</p>
<pre><code class="language-bash">#!/bin/bash
</code></pre>
<p>你可以使用以下命令找到你的 bash shell 路径（可能与上述路径不同）：</p>
<pre><code class="language-bash">which bash
</code></pre>
<h4 id="bash">创建我们的第一个 bash 脚本</h4>
<p>我们的第一个脚本提示用户输入路径。然后，它将列出路径的内容。</p>
<p>使用 <code>vi</code> 命令创建一个名为 <code>run_all.sh</code> 的文件。您可以使用任何您喜欢的编辑器。</p>
<pre><code class="language-bash">vi run_all.sh
</code></pre>
<p>在文件中添加以下命令并保存：</p>
<pre><code class="language-bash">#!/bin/bash
echo "今天是 " `date`

echo -e "\n请输入目录路径"
read the_path

echo -e "\n 你的路径包含以下文件和文件夹："
ls $the_path
</code></pre>
<p>打印用户提供的目录内容的脚本</p>
<p>让我们逐行仔细看看脚本。我将再次显示相同的脚本，但这次带有行号。</p>
<pre><code class="language-bash">  1 #!/bin/bash
  2 echo "今天是 " `date`
  3
  4 echo -e "\n请输入目录路径"
  5 read the_path
  6
  7 echo -e "\n 你的路径包含以下文件和文件夹："
  8 ls $the_path
</code></pre>
<ul>
<li>第 1 行：Shebang (<code>#!/bin/bash</code>) 指向 bash shell 路径。</li>
<li>第 2 行：<code>echo</code> 命令在终端显示当前日期和时间。注意 <code>date</code> 在反引号中。</li>
<li>第 4 行：我们希望用户输入一个有效的路径。</li>
<li>第 5 行：<code>read</code> 命令读取输入并将其存储在变量 <code>the_path</code> 中。</li>
<li>第 8 行：<code>ls</code> 命令使用存储路径的变量并显示当前的文件和文件夹。</li>
</ul>
<h4 id="bash">执行 bash 脚本</h4>
<p>为了使脚本可执行，请使用以下命令为您的用户分配执行权限：</p>
<pre><code class="language-bash">chmod u+x run_all.sh
</code></pre>
<p>这里，</p>
<ul>
<li><code>chmod</code> 修改文件的所有权以供当前用户使用：<code>u</code>。</li>
<li><code>+x</code> 将执行权限添加到当前用户。这意味着作为所有者的用户现在可以运行该脚本。</li>
<li><code>run_all.sh</code> 是我们希望运行的文件。</li>
</ul>
<p>您可以使用下列任何方法运行脚本：</p>
<ul>
<li><code>sh run_all.sh</code></li>
<li><code>bash run_all.sh</code></li>
<li><code>./run_all.sh</code></li>
</ul>
<p>让我们看看它在运行中的样子 🚀</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/run-script-bash-2.gif" alt="run-script-bash-2" width="600" height="400" loading="lazy"></p>
<h2 id="bash-scripting-basics">Bash 脚本基础</h2>
<h3 id="comments-in-bash-scripting">Bash 脚本中的注释</h3>
<p>Bash 脚本中的注释以 <code>#</code> 开头。这意味着任何以 <code>#</code> 开头的行都是注释，将被解释器忽略。</p>
<p>注释对于文档编写非常有帮助，并且是帮助他人理解代码的一个好习惯。</p>
<p>以下是注释的示例：</p>
<pre><code class="language-bash"># 这是一个示例注释
# 这两行将被解释器忽略
</code></pre>
<h3 id="variables-and-data-types-in-bash">Bash 中的变量和数据类型</h3>
<p>变量让您存储数据。您可以在脚本中使用变量读取、访问和操作数据。</p>
<p>Bash 中没有数据类型。在 Bash 中，变量能够存储数值、单个字符或字符串。</p>
<p>在 Bash 中，您可以通过以下方式使用和设置变量值：</p>
<pre><code>
```bash
country=Pakistan
</code></pre>
<p>2. &nbsp;根据从程序或命令获取的输出，使用命令替换赋值。请注意，$ 是访问现有变量值所需的。</p>
<pre><code class="language-bash">same_country=$country
</code></pre>
<p>这会将 <code>country</code> 的值赋给新变量 <code>same_country</code></p>
<p>要访问变量值，请在变量名称后附加 <code>$</code>。</p>
<pre><code class="language-bash">zaira@Zaira:~$ country=Pakistan
zaira@Zaira:~$ echo $country
Pakistan
zaira@Zaira:~$ new_country=$country
zaira@Zaira:~$ echo $new_country
Pakistan
</code></pre>
<p>赋值和打印变量值</p>
<h3 id="">变量命名规范</h3>
<p>在 Bash 脚本中，以下是变量命名规范：</p>
<ol>
<li>变量名称应以字母或下划线 (<code>_</code>) 开头。</li>
<li>变量名称可以包含字母、数字和下划线 (<code>_</code>)。</li>
<li>变量名称区分大小写。</li>
<li>变量名称不应包含空格或特殊字符。</li>
<li>使用能反映变量用途的描述性名称。</li>
<li>避免使用保留关键字（如 <code>if</code>, <code>then</code>, <code>else</code>, <code>fi</code> 等）作为变量名称。</li>
</ol>
<p>以下是一些合法变量名称的示例：</p>
<pre><code class="language-bash">name
count
_var
myVar
MY_VAR
</code></pre>
<p>以下是一些非法变量名称的示例：</p>
<pre><code class="language-bash">2ndvar (变量名称以数字开头)
my var (变量名称包含空格)
my-var (变量名称包含连字符)
</code></pre>
<p>遵循这些命名规范有助于使 Bash 脚本更具可读性和易于维护。</p>
<h3 id="input-and-output-in-bash-scripts">Bash 脚本中的输入和输出</h3>
<h4 id="">收集输入</h4>
<p>在本节中，我们将讨论一些为脚本提供输入的方法。</p>
<ol>
<li>读取用户输入并将其存储在变量中</li>
</ol>
<p>我们可以使用 <code>read</code> 命令读取用户输入。</p>
<pre><code class="language-bash">#!/bin/bash 

echo "What's your name?" 

read entered_name 

echo -e "\nWelcome to bash tutorial" $entered_name
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/name-sh.gif" alt="name-sh" width="600" height="400" loading="lazy"></p>
<p>2. &nbsp;从文件读取</p>
<p>此代码从名为 <code>input.txt</code> 的文件中读取每一行并将其打印到终端。我们将在本文稍后学习 while 循环。</p>
<pre><code class="language-bash">while read line
do
  echo $line
done &lt; input.txt
</code></pre>
<p>3. &nbsp;命令行参数</p>
<p>在 bash 脚本或函数中，<code>$1</code> 表示传递的初始参数，<code>$2</code> 表示传递的第二个参数，以此类推。</p>
<p>此脚本将名字作为命令行参数并打印个性化问候语。</p>
<pre><code class="language-bash">echo "Hello, $1!"
</code></pre>
<p>我们将 <code>Zaira</code> 作为参数提供给脚本。</p>
<pre><code class="language-bash">#!/bin/bash
echo "Hello, $1!"
</code></pre>
<p>脚本代码：<code>greeting.sh</code></p>
<p><strong>输出：</strong></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/name-sh-1.gif" alt="name-sh-1" width="600" height="400" loading="lazy"></p>
<h4 id="">显示输出</h4>
<p>这里我们将讨论一些从脚本接收输出的方法。</p>
<ol>
<li>打印到终端：</li>
</ol>
<pre><code class="language-bash">echo "Hello, World!"
</code></pre>
<p>这会将文本 “Hello, World!” 打印到终端。</p>
<p>2. &nbsp;写入文件：</p>
<pre><code class="language-bash">echo "This is some text." &gt; output.txt
</code></pre>
<p>这会将文本 "This is some text." 写入名为 <code>output.txt</code> 的文件。请注意，<code>&gt;</code> 操作符会覆盖文件内容（如果文件已存在）。</p>
<p>3. &nbsp;追加到文件：</p>
<pre><code class="language-bash">echo "More text." &gt;&gt; output.txt
</code></pre>
<p>这会将文本 "More text." 追加到 <code>output.txt</code> 文件的末尾。</p>
<p>4. &nbsp;重定向输出：</p>
<pre><code class="language-bash">ls &gt; files.txt
</code></pre>
<p>这会列出当前目录中的文件并将输出写入名为 <code>files.txt</code> 的文件。您可以通过这种方式将任何命令的输出重定向到文件。</p>
<h3 id="basic-bash-commands-echo-read-etc-">基本 Bash 命令（echo、read 等）</h3>
<p>以下是一些最常用的 bash 命令列表：</p>
<ol>
<li><code>cd</code>: 切换到不同目录。</li>
<li><code>ls</code>: 列出当前目录的内容。</li>
<li><code>mkdir</code>: 创建新目录。</li>
<li><code>touch</code>: 创建新文件。</li>
<li><code>rm</code>: 删除文件或目录。</li>
<li><code>cp</code>: 复制文件或目录。</li>
<li><code>mv</code>: 移动或重命名文件或目录。</li>
<li><code>echo</code>: 将文本打印到终端。</li>
<li><code>cat</code>: 连接并打印文件内容。</li>
<li><code>grep</code>: 在文件中搜索模式。</li>
<li><code>chmod</code>: 更改文件或目录的权限。</li>
<li><code>sudo</code>: 以管理权限运行命令。</li>
<li><code>df</code>: 显示可用磁盘空间。</li>
<li><code>history</code>: 显示先前执行的命令列表。</li>
<li><code>ps</code>: 显示有关正在运行的进程的信息。</li>
</ol>
<h3 id="conditional-statements-if-else-">条件语句（if/else）</h3>
<p>产生布尔结果（真或假）的表达式称为条件。有多种方法来评估条件，包括 <code>if</code>、<code>if-else</code>、<code>if-elif-else</code> 和嵌套条件。</p>
<p><strong><strong>语法</strong></strong>：</p>
<pre><code class="language-bash">if [[ condition ]];
then
	statement
elif [[ condition ]]; then
	statement 
else
	do this by default
fi
</code></pre>
<p>Bash 条件语句的语法</p>
<p>我们可以使用逻辑运算符（如 AND <code>-a</code> 和 OR <code>-o</code>）进行更具意义的比较。</p>
<pre><code class="language-bash">if [ $a -gt 60 -a $b -lt 100 ]
</code></pre>
<p>此语句检查两个条件是否都为真：a 大于 60 且 b 小于 100。</p>
<p>让我们看一个使用 <code>if</code>、<code>if-else</code> 和 <code>if-elif-else</code> 语句的 Bash 脚本示例，以确定用户输入的数字是正数、负数还是零：</p>
<pre><code class="language-bash">#!/bin/bash

echo "Please enter a number: "
read num
</code></pre>
<p>确定数字是正数、负数还是零的脚本</p>
<p>该脚本首先提示用户输入一个数字。然后，它使用一个 <code>if</code> 语句检查该数字是否大于 0。如果是的话，脚本输出该数字是正数。如果该数字不大于 0，脚本进入下一个语句，即 <code>if-elif</code> 语句。在这里，脚本检查该数字是否小于 0。如果是的话，脚本输出该数字是负数。最后，如果该数字既不大于 0 也不小于 0，脚本使用 <code>else</code> 语句输出该数字是零。</p>
<p>来看一下它的运行情况 🚀</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/test-odd.gif" alt="test-odd" width="600" height="400" loading="lazy"></p>
<h2 id="looping-and-branching-in-bash">在 Bash 中的循环和分支</h2>
<h3 id="while-loop">While 循环</h3>
<p>While 循环检查一个条件，并且在条件为 <code>true</code> 时持续循环。我们需要提供一个计数器语句来增加计数器以控制循环的执行。</p>
<p>在下面的例子中，<code>(( i += 1 ))</code> 是增加 <code>i</code> 值的计数器语句。该循环将恰好运行 10 次。</p>
<pre><code class="language-bash">#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
  (( i += 1 ))
done
</code></pre>
<p>While 循环迭代 10 次。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-187.png" alt="image-187" width="600" height="400" loading="lazy"></p>
<h3 id="for-loop">For 循环</h3>
<p><code>for</code> 循环，就像 <code>while</code> 循环一样，允许你执行特定次数的语句。每个循环在语法和用法上有所不同。</p>
<p>在下面的例子中，该循环将迭代 5 次。</p>
<pre><code class="language-bash">#!/bin/bash

for i in {1..5}
do
    echo $i
done
</code></pre>
<p>For 循环迭代 5 次。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-186.png" alt="image-186" width="600" height="400" loading="lazy"></p>
<h3 id="case-statements">Case 语句</h3>
<p>在 Bash 中，case 语句用于将给定值与一系列模式进行比较，并根据第一个匹配的模式执行一段代码。Bash 中 case 语句的语法如下：</p>
<pre><code class="language-bash">case expression in
    pattern1)
        # code to execute if expression matches pattern1
        ;;
    pattern2)
        # code to execute if expression matches pattern2
        ;;
    pattern3)
        # code to execute if expression matches pattern3
        ;;
    *)
        # code to execute if none of the above patterns match expression
        ;;
esac
</code></pre>
<p>Case 语句语法</p>
<p>这里，“expression” 是我们想要比较的值，“pattern1”、“pattern2”、“pattern3”等是我们想要进行比较的模式。</p>
<p>双分号 “;;” 将要为每个模式执行的代码块分隔开来。星号 “*” 代表默认情况，当没有一个指定的模式匹配该表达式时执行。</p>
<p>让我们看一个例子。</p>
<pre><code class="language-bash">fruit="apple"

case $fruit in
    "apple")
        echo "This is a red fruit."
        ;;
    "banana")
        echo "This is a yellow fruit."
        ;;
    "orange")
        echo "This is an orange fruit."
        ;;
    *)
        echo "Unknown fruit."
        ;;
esac
</code></pre>
<p>Case 语句示例</p>
<p>在这个例子中，由于 “fruit” 的值是 “apple”，第一个模式匹配，并且执行 echo “This is a red fruit.” 的代码块。如果 “fruit” 的值是 “banana”，第二个模式将匹配并执行 echo “This is a yellow fruit.” 的代码块，依此类推。如果 “fruit” 的值不匹配任何指定的模式，则执行默认情况，输出 “Unknown fruit.”。</p>
<h2 id="how-to-schedule-scripts-using-cron">如何使用 cron 安排脚本</h2>
<p>Cron 是 Unix-like 操作系统中用于作业调度的强大工具。通过配置 cron，你可以设置自动作业在每日、每周、每月或特定时间运行。cron 提供的自动化能力在 Linux 系统管理中起到了至关重要的作用。</p>
<p>以下是调度 crons 的语法：</p>
<pre><code class="language-bash"># Cron job example
* * * * * sh /path/to/script.sh
</code></pre>
<p>这里，<code>*</code> 代表分别的分钟、小时、日、月、周几。</p>
<p>以下是一些安排 cron 作业的示例。</p>
<table>
<thead>
<tr>
<th>安排</th>
<th>描述</th>
<th>示例</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>0 0 * * *</code></td>
<td>每天午夜运行一个脚本</td>
<td><code>0 0 * * * /path/to/script.sh</code></td>
</tr>
<tr>
<td><code>*/5 * * * *</code></td>
<td>每 5 分钟运行一个脚本</td>
<td><code>*/5 * * * * /path/to/script.sh</code></td>
</tr>
<tr>
<td><code>0 6 * * 1-5</code></td>
<td>从星期一到星期五每天早上 6 点运行一个脚本</td>
<td><code>0 6 * * 1-5 /path/to/script.sh</code></td>
</tr>
<tr>
<td><code>0 0 1-7 * *</code></td>
<td>每个月的前 7 天运行一个脚本</td>
<td><code>0 0 1-7 * * /path/to/script.sh</code></td>
</tr>
<tr>
<td><code>0 12 1 * *</code></td>
<td>每个月的第一天中午 12 点运行一个脚本</td>
<td><code>0 12 1 * * /path/to/script.sh</code></td>
</tr>
</tbody>
</table>
<h4 id="crontab">使用 crontab</h4>
<p><code>crontab</code> 工具用于添加和编辑 cron 作业。</p>
<p><code>crontab -l</code> 列出特定用户已经安排好的脚本。</p>
<p>你可以通过 <code>crontab -e</code> 添加和编辑 cron。</p>
<p>你可以在我的<a href="https://www.freecodecamp.org/news/cron-jobs-in-linux/">另一篇文章</a>中阅读更多关于 cron 作业的内容。</p>
<h2 id="how-to-debug-and-troubleshoot-bash-scripts">如何调试和排除 Bash 脚本的故障</h2>
<p>调试和排除故障是任何 Bash 脚本编写者的重要技能。虽然 Bash 脚本可以非常强大，但它们也容易出现错误和意外行为。在本节中，我们将讨论一些调试和排除 Bash 脚本故障的技巧和技术。</p>
<p>调试 Bash 脚本最有用的技巧之一是在脚本的开头设置 <code>set -x</code> 选项。这个选项启用了调试模式，使得 Bash 会在终端中打印它执行的每个命令，并以 <code>+</code> 符号作为前缀。这对于识别脚本中出现错误的位置非常有帮助。</p>
<pre><code class="language-bash">#!/bin/bash

set -x

# 您的脚本放在这里
</code></pre>
<h3 id="">检查退出码</h3>
<p>当 Bash 遇到错误时，它会设置一个退出码来指示错误的性质。您可以使用 <code>$?</code> 变量检查最近命令的退出码。值为 <code>0</code> 表示成功，而任何其他值表示错误。</p>
<pre><code class="language-bash">#!/bin/bash

# 您的脚本放在这里

if [ $? -ne 0 ]; then
    echo "发生错误。"
fi
</code></pre>
<h3 id="echo">使用 <code>echo</code> 语句</h3>
<p>另一个调试 Bash 脚本的有用技巧是在代码中插入 <code>echo</code> 语句。这可以帮助您识别错误发生的位置以及变量传递的值是什么。</p>
<pre><code class="language-bash">#!/bin/bash

# 您的脚本放在这里

echo "变量 x 的值是: $x"

# 更多代码放在这里
</code></pre>
<h3 id="sete">使用 <code>set -e</code> 选项</h3>
<p>如果您希望在脚本中的任何命令失败时立即退出脚本，您可以使用 <code>set -e</code> 选项。这个选项会使 Bash 在脚本中的任何命令失败时退出并带有错误，这样可以更容易地识别和修复脚本中的错误。</p>
<pre><code class="language-bash">#!/bin/bash

set -e

# 您的脚本放在这里
</code></pre>
<h3 id="">通过验证日志来排查定时任务</h3>
<p>我们可以使用日志文件来排查定时任务。日志会记录所有的计划任务。您可以在日志中检查并验证特定任务是否按预期运行。</p>
<p>对于 Ubuntu/Debian，您可以在这里找到 <code>cron</code> 日志：</p>
<pre><code class="language-bash">/var/log/syslog
</code></pre>
<p>其他发行版的位置各不相同。</p>
<p>一个 cron 任务日志文件可能看起来像这样：</p>
<pre><code class="language-bash">2022-03-11 00:00:01 Task started
2022-03-11 00:00:02 Running script /path/to/script.sh
2022-03-11 00:00:03 Script completed successfully
2022-03-11 00:05:01 Task started
2022-03-11 00:05:02 Running script /path/to/script.sh
2022-03-11 00:05:03 Error: unable to connect to database
2022-03-11 00:05:03 Script exited with error code 1
2022-03-11 00:10:01 Task started
2022-03-11 00:10:02 Running script /path/to/script.sh
2022-03-11 00:10:03 Script completed successfully
</code></pre>
<p>Cron 日志</p>
<h2 id="conclusion">总结</h2>
<p>在本文中，我们首先介绍了如何访问终端，然后运行了一些基本的 bash 命令。我们还学习了什么是 bash shell。我们简要地了解了使用循环和条件语句实现分支代码。最后，我们讨论了使用 cron 来自动化脚本，并介绍了一些故障排除技巧。</p>
<h3 id="resources-for-learning-more-about-bash-scripting">学习更多关于 Bash 脚本的资源</h3>
<p>如果您想深入了解 bash 脚本的世界，我建议您看看 freeCodeCamp 上这门 6 小时的 Linux 课程。</p>
<figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/sWbUDq4S6Y8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Introduction to Linux – Full Course for Beginners" name="fitvid0"></iframe>
          </div>
        </div>
      </figure>
<p>在本教程中，你学到了最喜欢的内容是什么？你还可以在这些<a href="https://zaira_.bio.link/">平台</a>上与我联系。</p>
<p>让我们在下篇教程中再见，祝你编码愉快 😁</p>
<p>封面图片来源：<a href="https://www.freepik.com/free-vector/hand-drawn-flat-design-devops-illustration_25726540.htm#query=programmer%20linux&amp;position=4&amp;from_view=search&amp;track=ais">Freepik</a></p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 面向初学者的 Linux Shell——解释 Bash、Zsh 和 Fish ]]>
                </title>
                <description>
                    <![CDATA[ 当你打开终端时，很可能发现终端使用 Bash 作为其 UNIX shell [https://zh.m.wikipedia.org/zh-hans/Unix_shell]  环境。当然除了 Bash，还存在其他“shell”环境。 例如 C Shell [https://zh.wikipedia.org/wiki/C_Shell]、Korn Shell [https://zh.wikipedia.org/wiki/KornShell]、Z Shell [https://zh.wikipedia.org/zh-tw/Z_shell]，甚至 Fish Shell。不同的 shell 环境各有千秋，在你选择自己系统的 shell 之前，你应该评估一下。 我将在本文中介绍一些流行的 shell 及主要功能，帮助你做选择。 Bash Shell Bash Shell（或 Bourne Again Shell）是一种 UNIX shell 和命令语言。它是由 Brain Fox 为 GNU 项目编写的，目的是作为 Bourne Shell (sh) 的免费软件替代品。 Bash 于 198 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/linux-shells-explained/</link>
                <guid isPermaLink="false">639ed3c3a7bffa07c744166d</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Bash ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ PapayaHUANG ]]>
                </dc:creator>
                <pubDate>Fri, 16 Dec 2022 04:19:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/12/pexels-oleksandr-pidvalnyi-320260.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/linux-shells-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Linux Shells for Beginners – Bash, Zsh, and Fish Explained</a>
      </p><!--kg-card-begin: markdown--><p>当你打开终端时，很可能发现终端使用 Bash 作为其 <a href="https://zh.m.wikipedia.org/zh-hans/Unix_shell">UNIX shell</a> 环境。当然除了 Bash，还存在其他“shell”环境。</p>
<p>例如 <a href="https://zh.wikipedia.org/wiki/C_Shell">C Shell</a>、<a href="https://zh.wikipedia.org/wiki/KornShell">Korn Shell</a>、<a href="https://zh.wikipedia.org/zh-tw/Z_shell">Z Shell</a>，甚至 Fish Shell。不同的 shell 环境各有千秋，在你选择自己系统的 shell 之前，你应该评估一下。</p>
<p>我将在本文中介绍一些流行的 shell 及主要功能，帮助你做选择。</p>
<h2 id="bashshell">Bash Shell</h2>
<p>Bash Shell（或 Bourne Again Shell）是一种 UNIX shell 和命令语言。它是由 Brain Fox 为 GNU 项目编写的，目的是作为 Bourne Shell (sh) 的免费软件替代品。</p>
<p>Bash 于 1989 年首次发布，它是大多数 Linux 发行版的默认 Shell 环境。其他发行版，如 Kali Linux，使用 Z Shell 作为默认 shell。</p>
<p>Bash 是 Linus Torvalds（Linux 的创建者）移植到 Linux 的首批程序之一。</p>
<p><img src="https://media.geeksforgeeks.org/wp-content/uploads/cli_example.png" alt="Bash" width="746" height="452" loading="lazy"></p>
<p><a href="https://www.geeksforgeeks.org/introduction-linux-shell-shell-scripting/">这是以上图片的来源</a></p>
<p>你应该记住 Bash 也是一种编程语言。所以它即是一个“Shell”，同时你也可以使用 Bash 对行为进行编程，例如，Bash 中的"Hello World"程序：</p>
<pre><code>#!/bin/bash
echo "Hello World"
</code></pre>
<h3 id="bash">Bash 的关键点</h3>
<ul>
<li>因为 Bash 是大多数系统上的默认 shell 环境，大多数用户使用它。</li>
<li>Bash 没有内联通配符表达式。通配符表达式是当你想要在 Shell 中搜索模式（pattern）的时候使用，类似于正则表达式（Regex）。三个主要的通配符是 <code>*</code>、<code>?</code> 和 <code>[]</code>。</li>
<li>不能自动更改目录名称。</li>
<li><code>#</code> 在脚本中被视为注释。</li>
<li>它有<code>shopt</code>（shell option 缩写）设置。</li>
<li>提示符（prompt）有反斜杠转义。</li>
<li>用户配置设置在 <code>.bashrc</code> 中。</li>
</ul>
<h2 id="zshell">Z Shell</h2>
<p>Z Shell 又称 Zsh， 是一个与 Bash 非常相似的 UNIX shell。你还可以使用 Zsh 编写脚本并将 shell 用作命令解释器。</p>
<p>Zsh 是 Bourne shell 的扩展，因此在此之上很多改进。 Zsh 于 1990 年由 Paul Falstad 发布，它具有 Bash、Korn Shell 和 C Shell 共有的一些功能。</p>
<p>macOS 默认使用 Zsh Shell。</p>
<p><img src="https://ohmyz.sh/img/themes/nebirhos.jpg" alt="Zsh Shell" width="673" height="374" loading="lazy"></p>
<p><a href="https://ohmyz.sh/">这是以上图片的来源</a></p>
<h3 id="zsh">Zsh 的关键点</h3>
<ul>
<li>在终端使用时，Zsh 带有自动补全功能。因此，当你按下<code>Tab↹</code>以自动补全你想运行的任何命令时，它不仅为你自动补全，而且弹出下拉菜单，包含所有其他可能的文件和目录。</li>
</ul>
<p><img src="https://i.ibb.co/bswYkn0/0f8c8e1a6016.gif" alt="Zsh Toggle" width="1440" height="810" loading="lazy"></p>
<ul>
<li>支持内联通配符表达式</li>
<li>比 Bash 可配置度更高</li>
<li>支持插件和主题。这里是 Zsh 的<a href="https://github.com/unixorn/awesome-zsh-plugins">插件清单</a></li>
</ul>
<p>同时，还有围绕 Z Shell 构建的框架。最受欢迎的框架之一是<a href="https://ohmyz.sh/">Oh My Zsh</a>，它是一个社区驱动的开源框架，用于管理 Zsh 配置。（我用 Oh My Zsh😄）</p>
<p><img src="https://cdn.osxdaily.com/wp-content/uploads/2021/11/oh-my-zsh-mac.jpg" alt="Oh My Zsh" width="1894" height="1090" loading="lazy"></p>
<p><a href="https://osxdaily.com/2021/11/15/how-install-oh-my-zsh-mac/">这是以上图片的来源</a></p>
<p>Zsh 和 Oh My Zsh 很相似，但并不完全相同。重申一下，Oh My Zsh 是一种管理 Zsh 配置的方式，它不是 Shell 本身。</p>
<h2 id="fishshell">Fish Shell</h2>
<p>Fish 是一个强调交互性和可用性的 UNIX shell 环境。与 Zsh 不同，Fish 旨在为用户提供交互性，而不是信任用户实现自己的配置。</p>
<p>它由 Axel Liljencrantz 于 2005 年创建。由于不符合 POSIX shell 标准，Fish 被认为是“奇异的 shell”。 [[资料来源](<a href="https://en.wikipedia.org/wiki/Fish_(Unix_shell)">https://en.wikipedia.org/wiki/Fish_(Unix_shell)</a>]</p>
<p><img src="http://blog.sudobits.com/wp-content/uploads/2015/06/fish-shell-screenshot.png" alt="Fish Shell" width="600" height="400" loading="lazy"></p>
<p><a href="https://blog.sudobits.com/2015/06/05/fish-a-user-friendly-command-line-shell-for-ubuntulinux/">这是以上图片的来源</a></p>
<h3 id="fish">Fish 的关键点</h3>
<ul>
<li>Fish 根据你的命令历史记录和所在目录提供“键入时搜索”自动建议。与 Bash 的历史搜索类似，Fish Shell 的搜索历史<strong>始终</strong>处于打开状态。这样，用户终端工作时能够获得交互式反馈。</li>
</ul>
<p><img src="https://taskwarrior.org/images/fish.gif" alt="Fish autocomplete" width="640" height="480" loading="lazy"></p>
<p><a href="https://taskwarrior.org/news/news.20140906/">这是以上图片的来源</a></p>
<ul>
<li>Fish 还倾向将功能作为命令而不是语法。这使得功能的选项和帮助文本可见。</li>
<li>由于默认情况下 Fish 已经预置了很多配置，因此它被认为比 Zsh 等其他 <code>sh</code> 选项更适合初学者。</li>
<li>Fish 的脚本语言不同于 Zsh 和 Bash。 Zsh 使用更多简化指令（alias），而 Fish 避免在脚本语言中使用简化指令。</li>
</ul>
<p>如果你只是使用基本命令（如 <code>cd</code>、 <code>cp</code>、 <code>vim</code>、 <code>ssh</code> 等）编写脚本，你将不会注意到 Fish 和 Bash 的脚本语言的工作方式有何不同。</p>
<p>两者最大的区别之一是当你尝试捕获命令的输出时。在 Bash 中你可能习惯于这样：</p>
<pre><code class="language-bash">todays_date=$(date)
echo "Todays date is $todays_date"
</code></pre>
<p><img src="https://i.ibb.co/0hrF0Y3/fa71b0032fba.gif" alt="Output" width="657" height="385" loading="lazy"></p>
<pre><code>Todays Date is Tue Dec 13 15:29:28 CST 2022
</code></pre>
<p>而在 Fish 中，捕获输出的方式不同。Fish 脚本等价物如下：</p>
<pre><code class="language-bash">set date (date)
echo "Todays Date $date"
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/12/ezgif.com-gif-maker.gif" alt="ezgif.com-gif-maker" width="600" height="400" loading="lazy"></p>
<pre><code class="language-bash">todays date is Tue Dec 13 21:35:03 UTC 2022
</code></pre>
<h2 id="">总结</h2>
<p>Bash、Z Shell 和 Fish Shell 各有优点，也有一些相似之处。既然对它们有了更多的了解，你就可以在工作中更有效地使用它们。</p>
<p>如果你想要更可配置的 shell，你可以使用 Zsh（甚至安装 Oh My Zsh）。如果你想要更多交互的终端体验，同时不需要大量配置，你可以使用 Fish Shell。如果你想要经典的感觉，你可以保留 Bash。</p>
<p>选择取决于你作为开发人员的偏好 - 所以只需选择最适合你的 shell。</p>
<p><em>希望这对篇文章对你有所帮助！感谢阅读</em> 🐚🐚🐚</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 帮助你提高工作效率的 Bash 命令行 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：Bash Command Line Tips to Help You Work Faster [https://www.freecodecamp.org/news/bash-command-line-tips-to-help-you-work-faster/] ，作者：Vinod Mathew Sebastian [https://www.freecodecamp.org/news/author/vinod/] 学习命令行对任何有抱负的开发者来说都是必不可少的。 而要在命令行上执行命令，你需要一个 shell。 Bash shell 在 Mac 和 Linux 等类 Unix 操作系统中很流行。事实上，在大多数 Linux 发行版中，Bash 是默认的 shell。 你还可以通过 WSL（Windows 下的 Linux 子系统）在 Windows 中使用 Bash。 在学习了一些基本的 Bash 命令之后，现在是时候开始加速了。 这个教程不是为绝对的初学者准备的，但我希望新手和高级用户都可能从中得到一些东西。 下面是 10 个 Bash 命令，它们将帮助你在终端上 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/bash-command-line-tips-to-help-you-work-faster/</link>
                <guid isPermaLink="false">6274e3fd395ec5063718b952</guid>
                
                    <category>
                        <![CDATA[ Bash ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Fri, 06 May 2022 07:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/05/Bash-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/bash-command-line-tips-to-help-you-work-faster/">Bash Command Line Tips to Help You Work Faster</a>，作者：<a href="https://www.freecodecamp.org/news/author/vinod/">Vinod Mathew Sebastian</a></p><p>学习命令行对任何有抱负的开发者来说都是必不可少的。</p><p>而要在命令行上执行命令，你需要一个 shell。</p><p>Bash shell 在 Mac 和 Linux 等类 Unix 操作系统中很流行。事实上，在大多数 Linux 发行版中，Bash 是默认的 shell。</p><p>你还可以通过 WSL（Windows 下的 Linux 子系统）在 Windows 中使用 Bash。</p><p>在学习了一些基本的 Bash 命令之后，现在是时候开始加速了。</p><p>这个教程不是为绝对的初学者准备的，但我希望新手和高级用户都可能从中得到一些东西。</p><p>下面是 10 个 Bash 命令，它们将帮助你在终端上更快地工作。</p><h2 id="1-control-l-control-d-"><strong>1. 使用 Control + L 清空屏幕，使用 Control + D 退出</strong></h2><p>要清空终端屏幕，在命令行上输入 <code>clear</code>。</p><p>要退出，请输入 <code>exit</code>。</p><p>更好的是，按 Ctrl + l（⌘ + l）清除屏幕，按 Ctrl + d（⌘ + d）关闭终端。</p><h2 id="2-nohup-"><strong>2. 使用 </strong><code><strong>nohup</strong></code><strong> 命令</strong>生成不随终端会话结束的进程</h2><p>被加载到内存中的程序叫作进程。</p><p>有时，我从命令行中打开 Firefox：<code>firefox https://freecodecamp.org</code>。<br><br>但我一关闭终端，Firefox 也就崩溃了。</p><p>为了防止这种情况，使用 <code>nohup</code>（不挂断）命令：<code>nohup firefox https://freecodecamp.org</code>。</p><p>现在当我关闭终端时，Firefox 没有崩溃，但我的标签页却崩溃了。</p><p>解决方法：通过添加 <code>&amp;</code> 符号使 Firefox 成为后台进程。</p><p><code>nohup firefox https://freecodecamp.org &amp;</code></p><p>现在，即使我退出终端，我的标签也都完好无损。</p><h2 id="3-pkill-"><strong>3. 使用 <code>pkill</code> </strong>只输入部分名称就可以关闭进程</h2><p>通过使用 <code>killall</code> 命令，我们可以通过一个进程的名字关闭它：</p><p><code>killall firefox</code></p><p>更好的方法是使用 <code>pkill</code>，输入一部分名字就关闭它：</p><p><code>pkill fire*</code></p><h2 id="4-time-"><strong>4. 在前面添加 </strong><code><strong>time</strong></code><strong> </strong>命令以了解某事的执行速度</h2><p>你想知道在 shell 中执行某事需要多长时间吗？</p><p>只需要把 <code>time</code> 加到命令的前面：<code>time gcc -g *.c</code>.</p><h2 id="5-linux-cat-etc-rel-"><strong>5. 在 Linux 上，使用 </strong><code><strong>cat /etc/*rel*</strong></code><strong> </strong>查看发行版名称</h2><p>键入 <code>uname -a</code> 显示系统信息。</p><p>想仔细检查你正在运行的发行版吗？</p><p>只需在 shell 上键入<em> </em><code>cat /etc/*rel*</code><em> </em>并按回车键。</p><h2 id="6-sed-"><strong>6. 在文本文件中使用 </strong><code><strong>sed</strong></code><strong> 命令查找和替换</strong></h2><p>你想替换一个文本文件中出现的多个词吗？</p><p>使用 <code>sed</code> 命令：</p><p><code>sed s'/apples/oranges/g' myfile.txt</code></p><p>在这里，所有出现的 “apples” 都被改成了 “oranges”。</p><p>如果你只需要替换每一行中出现的第一个词，只需去掉末尾的 “g” 后缀：<code>sed s'/apples/oranges/' myfile.txt</code>。</p><p>“g” 是指全局。</p><p>正斜线 <code>/</code> 是分隔符。事实上，你可以使用任何定界符。</p><p>让我们用一个下划线 <code>_</code> 作为分隔符：<code>sed s'_apples_oranges_'g ` myfile.txt</code>。</p><p>简单地使用 <code>sed</code> 只在标准输出上进行替换。原始文件是不变的。</p><p>要改变文件，使用 <code>-i</code> 标志：<code>sed -i s'_apples_oranges_g' myfile.txt</code>。</p><h2 id="7-curl-ip-"><strong>7. 使用 </strong><code><strong>curl</strong></code><strong> </strong>了解你的计算机的公共 IP 地址</h2><p>有两种类型的 IP 地址：私有和公共。</p><p>系统分配可以使用 <code>ifconfig</code> 命令检查的内部 IP 地址。</p><p>但是你想知道你的计算机的公共 IP——ISP 分配给你的接口的 IP 地址吗？</p><p>在线时，只需使用 <code>curl ifconfig.me ; echo</code> 或 <code>curl ifconfig.co ; echo</code>。</p><h2 id="8-ctrl-r-r-"><strong>8. 使用 Ctrl + R（⌘ + R）</strong>反向搜索</h2><p>按向上方向键显示你所输入的最后一条命令。</p><p>键入 <code>history</code> 显示你所键入的所有命令，这些命令都保存在 bash 历史中。</p><p>更好的是，在 shell 上输入 Ctrl + r（⌘ + r），然后开始输入命令。</p><p>当你输入时，shell 会从历史记录中自动完成。一旦你找到匹配的命令，就按回车键。</p><p><strong>如果你在本教程中只记得一件事，请记住这个组合键：Ctrl + r（⌘ + r）。</strong></p><p>它将为你节省大量时间，我保证！。</p><h2 id="9-shell-"><strong>9. 使用 shell 做数学运算</strong></h2><p>对于不输入或输出分数的简单计算，你可以简单地使用：</p><pre><code>:~$ echo $((19*34))
:~$ 646
</code></pre><p>对于涉及分数的计算，只需 <code>echo</code> 表达式并将其通过管道传递到 <code>bc</code> 命令。</p><pre><code>:~$ echo "scale=2; 9*3/((2*2)+1)" | bc
:~$ 5.40
</code></pre><p>在这里，“scale” 是我们需要的精度。我已将其指定为两位小数。</p><h2 id="10-"><strong>10. </strong>使用大括号扩展批量创建文件</h2><p>我们如何在一个文件夹内创建 100 个文件？</p><p><em><em>file1.txt, file2.txt, file3.txt ... file100.txt</em></em></p><p>通过使用大括号扩展：<code>touch file{1..100}.txt</code>。</p><p>我们需要为我们的项目创建三个文件：app.html、app.css 和 app.js。</p><p>我们可以简单地使用大括号扩展来一次性创建所有的文件，而不是一个一个地创建。</p><pre><code>:~$ touch app.{html,css,js}
:~$ ls
app.html app.css app.js
:~$ 
</code></pre><p>或者在项目文件夹中，我们需要创建五个目录：images、css、src、templates 和 scripts。</p><p>我们可以使用：</p><pre><code>:~$ mkdir {images,css,src,templates,scripts}
:~$ ls
images css src templates scripts
:~$ 
</code></pre><p>这里只有一个注意事项：需要确保大括号内的单词之间没有空格。</p><h2 id="-"><strong>总结</strong></h2><p>我已经列出了 10 个 Bash 命令行的技巧，通过这些技巧你可以在终端上提高工作效率。</p><p>学习这些 Bash 命令，它将在你的编程之旅中起到很好的作用。</p><p>祝你编程愉快！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Bash sleep 命令——如何让 Shell 脚本等待 N 秒 ]]>
                </title>
                <description>
                    <![CDATA[ 在编写 shell 脚本时，你可能会发现在继续之前需要等待特定秒数。例如，你可能希望脚本在进程完成时或在重试失败的命令之前等待。 为此，你可以使用非常简单的 sleep 命令。 如何使用 Bash sleep 命令 sleep 是一个非常通用的命令，具有非常简单的语法，只需要输入 sleep N。这将使你的脚本暂停 N 秒，其中 N 是正整数或浮点数。 看一下这个基本的示例： echo "Hello there!" sleep 2 echo "Oops! I fell asleep for a couple seconds!" 这个脚本的结果如下所示： 同样，你可以使用浮点数。例如，sleep .8 将使你的脚本暂停 0.8 秒。 sleep 命令的基本用法就是这样了！ 使用 sleep 命令时的注意事项 sleep 的默认时间单位是秒，这就是为什么我们不必在上面的示例中指定单位。 在某些类型的机器（即 BSD 系统和 MacOS）上，唯一支持的时间单位是秒。其他类 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/bash-sleep-how-to-make-a-shell-script-wait-n-seconds-example-command/</link>
                <guid isPermaLink="false">61406d8bb201730648bda001</guid>
                
                    <category>
                        <![CDATA[ Bash ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Tue, 14 Sep 2021 07:30:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/09/pexels-----------------------1560424.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>在编写 shell 脚本时，你可能会发现在继续之前需要等待特定秒数。例如，你可能希望脚本在进程完成时或在重试失败的命令之前等待。</p><p>为此，你可以使用非常简单的 <code>sleep</code> 命令。</p><h2 id="-bash-sleep-">如何使用 Bash sleep 命令</h2><p><code>sleep</code> 是一个非常通用的命令，具有非常简单的语法，只需要输入 <code>sleep N</code>。这将使你的脚本暂停 <code>N</code> 秒，其中 <code>N</code> 是正整数或浮点数。</p><p>看一下这个基本的示例：</p><pre><code>echo "Hello there!"
sleep 2
echo "Oops! I fell asleep for a couple seconds!"</code></pre><p>这个脚本的结果如下所示：</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/2021-09-10-22.33.49.gif" class="kg-image" alt="gif of script running" width="600" height="400" loading="lazy"></figure><p>同样，你可以使用浮点数。例如，<code>sleep .8</code> 将使你的脚本暂停 0.8 秒。</p><p><code>sleep</code> 命令的基本用法就是这样了！</p><h2 id="-sleep-">使用 sleep 命令时的注意事项</h2><p><code>sleep</code> 的默认时间单位是<strong>秒</strong>，这就是为什么我们不必在上面的示例中指定单位。</p><p>在某些类型的机器（即 BSD 系统和 MacOS）上，唯一支持的时间单位是秒。其他类 Unix 操作系统可能会支持以下时间单位：</p><ul><li><code>s</code>：秒</li><li><code>m</code>：分钟</li><li><code>h</code>：小时</li><li><code>d</code>：天</li></ul><p>也可以在 <code>sleep</code> 命令中使用多个参数。如果包含两个或更多数字，系统将等待与这些数字之和相等的时间。</p><p>例如， <code>sleep 2m 30s</code> 将创建 2 分半钟的停顿。请注意，要在 MacOS 或 BSD 机器上获得相同的结果，你将运行等效的命令 <code>sleep 150</code>，因为 2 分 30 秒等于 150 秒。</p><h2 id="-">总结</h2><p><code>sleep</code> 命令是一种在 Bash 脚本中添加暂停的有用方法。与其他命令结合使用，<code>sleep</code> 可以帮助你创建定时警报、以正确的顺序运行操作、间隔尝试连接到网站等等。将这个简单但功能强大的工具放入你的 Bash 工具箱，开始编写代码吧！</p><p>原文：<a href="https://www.freecodecamp.org/news/bash-sleep-how-to-make-a-shell-script-wait-n-seconds-example-command/">Bash Sleep – How to Make a Shell Script Wait N Seconds (Example Command)</a>，作者：<a href="https://www.freecodecamp.org/news/author/veronica/">Veronica Stork</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何在 Bash 中声明字符串数组 ]]>
                </title>
                <description>
                    <![CDATA[ Bash 为你提供了一种自动化命令行任务的便捷方式。 使用 Bash，你可以做许多使用其他编程语言做的事情。你可以创建和使用变量、执行循环、使用条件逻辑，以及将数据存储在数组中。 虽然功能可能非常熟悉，但 Bash 的语法可能比较困难。在本文中，你将学习如何声明数组以及如何在代码中使用它们。 如何在 Bash 中声明数组 在 Bash 中声明数组很容易，但要注意语法。如果你习惯于使用其他语言进行编程，那么这些代码可能看起来很熟悉，但其中存在很容易忽略的细微差别。 要声明数组，请按照下列步骤操作：  * 为你的数组命名  * 在变量名称后面加上等号，等号周围不应有任何空格  * 将数组括在括号 () 中（不像 JavaScript 中的括号 []）  * 使用引号键入字符串，但它们之间没有逗号 数组声明将如下所示： myArray=("cat" "dog" "mouse" "frog) 就是这么简单！ 如何在 Bash 中读取数组 有几种不同的方法可以循环遍历数组。你可以遍历元素本身，也可以遍历索引。 如何遍历数组元素 你可以使用如下代码遍历数组元素： for st ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/bash-array-how-to-declare-an-array-of-strings-in-a-bash-script/</link>
                <guid isPermaLink="false">613f06feb201730648bd9db0</guid>
                
                    <category>
                        <![CDATA[ Bash ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Fri, 10 Sep 2021 08:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/09/pexels-belle-co-1000445.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Bash 为你提供了一种自动化命令行任务的便捷方式。</p><p>使用 Bash，你可以做许多使用其他编程语言做的事情。你可以创建和使用变量、执行循环、使用条件逻辑，以及将数据存储在数组中。</p><p>虽然功能可能非常熟悉，但 Bash 的语法可能比较困难。在本文中，你将学习如何声明数组以及如何在代码中使用它们。</p><h2 id="-bash-">如何在 Bash 中声明数组</h2><p>在 Bash 中声明数组很容易，但要注意语法。如果你习惯于使用其他语言进行编程，那么这些代码可能看起来很熟悉，但其中存在很容易忽略的细微差别。</p><p>要声明数组，请按照下列步骤操作：</p><ul><li>为你的数组命名</li><li>在变量名称后面加上等号，等号周围不应有任何空格</li><li>将数组括在括号 () 中（不像 JavaScript 中的括号 []）</li><li>使用引号键入字符串，但它们之间没有逗号</li></ul><p>数组声明将如下所示：</p><pre><code class="language-sh">myArray=("cat" "dog" "mouse" "frog)</code></pre><p>就是这么简单！</p><h2 id="-bash--1"><strong>如何在 Bash 中读取数组</strong></h2><p>有几种不同的方法可以循环遍历数组。你可以遍历元素本身，也可以遍历索引。</p><h3 id="-"><strong>如何遍历数组元素</strong></h3><p>你可以使用如下代码遍历数组元素：</p><pre><code class="language-sh">for str in ${myArray[@]}; do
  echo $str
done</code></pre><p>分解一下：这有点像在 JavaScript 中使用 <code>forEach</code>。打印数组（myArray）中的每个字符串（str）。</p><p>输出结果如下所示：</p><pre><code>cat
dog
mouse
frog</code></pre><p><strong>注意：</strong>方括号中的 <code>@</code> 符号表示你正在遍历数组中的所有元素。如果你忽略它而只是写 <code>for str in ${myArray}</code>，则只会打印数组中的第一个字符串。</p><h3 id="--1">如何遍历数组索引</h3><p>或者，你可以遍历数组的索引。这就像 JavaScript 中的 <code>for</code> 循环，当你希望能够访问每个元素的索引时，这非常有用。</p><p>要使用此方法，你的代码需要类似于以下内容：</p><pre><code class="language-sh">for i in ${!myArray[@]}; do
  echo "element $i is ${myArray[$i]}"
done</code></pre><p>输出结果如下所示：</p><pre><code>element 0 is cat
element 1 is dog
element 2 is mouse
element 3 is frog</code></pre><p><strong>注意：</strong><code>myArray</code> 变量开头的感叹号表示你正在访问数组的索引，而不是元素本身。如果你习惯使用表示否定的感叹号，这可能会造成混淆，因此请注意这一点。</p><p><strong>另一个注意事项：</strong>Bash 通常不需要对变量使用花括号，但对数组则需要。所以你会注意到，当你引用一个数组时，你使用语法 <code>${myArray}</code>，但是当你引用一个字符串或数字时，你只需使用一个美元符号：<code>$i</code>。</p><h2 id="--2"><strong>总结</strong></h2><p>Bash 对于创建自动化的命令行很有用。数组是一个很好的工具，你可以用它来存储多条数据。</p><p>声明和使用它们并不难，但它与其他语言不同，所以要注意避免出错。</p><p>原文：<a href="https://www.freecodecamp.org/news/bash-array-how-to-declare-an-array-of-strings-in-a-bash-script/">Bash Array – How to Declare an Array of Strings in a Bash Script</a>，作者：<a href="https://www.freecodecamp.org/news/author/veronica/">Veronica Stork</a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
