Unix/Linux - 什么是Shell?
你好,有抱负的程序设计师们!欢迎来到Unix和Linux壳的迷人世界。作为你友好的计算机科学老师,我很高兴引导你了解这个基本概念。让我们开始吧!
什么是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)"
让我们分解一下:
-
#!/bin/bash
:这被称为shebang。它告诉系统使用哪个解释器(在这个例子中是bash)。 -
echo
:这个命令将文本打印到屏幕上。 -
$(date)
和$(pwd)
:这些是命令替换。它们运行括号内的命令并将输出插入到我们的echo语句中。
要运行这个脚本:
- 将其保存为
hello_world.sh
- 使其可执行:
chmod +x hello_world.sh
- 运行它:
./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
这个脚本:
- 询问用户的名字和年龄
- 使用变量来存储和使用这些信息
- 使用条件(if-else)语句来检查年龄
- 进行计算以确定到达投票年龄的年数
记住,学习编码就像学习骑自行车。一开始,你可能会摔倒几次,但通过练习,你很快就能自如地骑行!
我希望这个Shell的介绍激发了你的兴趣。继续探索,不断提问,最重要的是,继续编码!谁知道呢?也许有一天,你会教下一代程序员关于Shell的神奇世界!
Credits: Image by storyset