Unix/Linux - 什么是Shell?

你好,有抱负的程序设计师们!欢迎来到Unix和Linux壳的迷人世界。作为你友好的计算机科学老师,我很高兴引导你了解这个基本概念。让我们开始吧!

Unix / Linux - What is Shell?

什么是Shell?

想象一下,你试图和一个说不同语言的朋友交流。你需要一个翻译,对吧?Shell就是你和计算机操作系统之间的那种翻译。它是一个命令行解释器,将你的人类可读命令翻译成计算机可以理解和执行的东西。

在我早期的教学日子里,我常常告诉我的学生,将Shell想象成他们计算机里的一只神奇的会说话的蛤蜍。你对它低语命令,它就让计算机按你的意愿行事。这并不完全准确,但它确实让这个概念深入人心!

Shell提示符

当你在Unix或Linux系统上打开终端时,你会看到类似这样的东西:

username@hostname:~$

这是你的Shell提示符。它就像计算机在说:“我准备好了,哦,明智的用户,请下达命令!”让我们来分解一下:

  • username:那就是你!
  • @:意思是“在”
  • hostname:你的计算机名称
  • ~:你的当前目录(~代表主目录)
  • $:表示你是一个普通用户(如果是root用户,则显示为#)

Shell类型

Unix/Linux系统中有几种类型的Shell可供选择。这就像有不同的冰淇淋口味——它们都很美味,但每种都有其独特的风味!以下是一些常见的类型:

Shell名称 描述
Bourne Shell (sh) Unix的原始Shell
Bourne Again Shell (bash) sh的增强版,Linux上最常见
C Shell (csh) 语法与C编程语言相似
Korn Shell (ksh) 结合了sh和csh的特性
Z Shell (zsh) bash的扩展版,有许多改进

Bash是最常见的Shell,因此我们的示例将集中在它上面。

Shell脚本

现在,就是魔法发生的地方!Shell脚本就像是计算机的食谱书。你不必一次输入一个命令,而是可以将一系列命令写入一个文件,然后一次性运行它们。这就好像教会计算机一项新技巧!

示例脚本

让我们创建第一个Shell脚本,我们将其命名为hello_world.sh

#!/bin/bash

echo "Hello, World!"
echo "Welcome to the wonderful world of shell scripting!"
echo "Today's date is $(date)"
echo "Your current directory is $(pwd)"

让我们分解一下:

  1. #!/bin/bash:这被称为shebang。它告诉系统使用哪个解释器(在这个例子中是bash)。
  2. echo:这个命令将文本打印到屏幕上。
  3. $(date)$(pwd):这些是命令替换。它们运行括号内的命令并将输出插入到我们的echo语句中。

要运行这个脚本:

  1. 将其保存为hello_world.sh
  2. 使其可执行:chmod +x hello_world.sh
  3. 运行它:./hello_world.sh

你应该会看到类似以下内容:

Hello, World!
Welcome to the wonderful world of shell scripting!
Today's date is Mon May 15 10:30:45 PDT 2023
Your current directory is /home/username

这酷不酷?你刚刚创建了你的第一个Shell脚本!

Shell注释

注释就像是你(或其他程序员)在代码中留下的便签。在Shell脚本中,注释以#开头:

# 这是一个注释
echo "这将被打印"
# echo "但这不会被打印"

我总是告诉我的学生:注释你的代码,就像是在给一个知道你住址的暴力精神病患者阅读一样。清晰的注释可以救命!(或者至少可以防止挫折。)

扩展Shell脚本

当你对Shell脚本更熟悉时,你可以创建更复杂的脚本。以下是一个演示变量、用户输入和条件语句的示例:

#!/bin/bash

# 询问用户的名字
echo "你叫什么名字?"
read name

# 向用户打招呼
echo "你好,$name!很高兴见到你。"

# 询问用户的年龄
echo "你多大了?"
read age

# 检查用户是否到了投票年龄
if [ $age -ge 18 ]
then
echo "你已经到了投票年龄!"
else
echo "你还没有到投票年龄。"
years_left=$((18 - age))
echo "再过$years_left年你就可以投票了。"
fi

这个脚本:

  1. 询问用户的名字和年龄
  2. 使用变量来存储和使用这些信息
  3. 使用条件(if-else)语句来检查年龄
  4. 进行计算以确定到达投票年龄的年数

记住,学习编码就像学习骑自行车。一开始,你可能会摔倒几次,但通过练习,你很快就能自如地骑行!

我希望这个Shell的介绍激发了你的兴趣。继续探索,不断提问,最重要的是,继续编码!谁知道呢?也许有一天,你会教下一代程序员关于Shell的神奇世界!

Credits: Image by storyset