计算机硬件不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
Linux 命令行由一个名为 shell 的程序提供。多年来,shell 程序不断演变,以满足各种需求。
一)什么是Shell ?
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 为你提供了与 Unix 系统交互的接口。它从你那里收集输入,并根据输入执行程序。当程序执行完毕后,它会显示该程序的输出。
Shell 是一个环境,我们可以在其中运行命令、程序和 Shell 脚本。就像操作系统有不同的版本一样,Shell 也有不同的版本。每种 Shell 版本都有自己的一套识别命令和功能。
Linux的内核位于计算机的核心。 它使硬件和软件之间的通信成为可能。 内核是操作系统的最内部部分,而外壳是最外部的部分。
Linux操作系统中的shell从终端用户那里获取命令,对其进行处理,然后给出输出。 它是用户用来处理程序,加工命令和脚本的界面。 外壳程由终端直接访问。
当您运行终端时,命令行管理程序会发出命令提示符(通常为$),您可以在其中键入您的输入,然后在按Enter键时执行输入。 此后,输出或结果显示在终端上。
Shell (外壳)包裹住操作系统的精密内部,可以保护其免受意外损坏。 就和贝壳的外壳保护贝壳一样,因此,称其为Shell。以后我们统一称其位shell.
二)Shell 分类
Linux中有两个主要的shell:
1. Bourne Shell:此Shell的提示符为$,其衍生代码如下:
- POSIX shell 也称为 sh
- Bourne Again SHell 称为 bash(最受欢迎)
- Sh (Bourne Shell): 早期的 Unix Shell,是 Bash 的前身。
- Zsh (Z Shell): 功能更为丰富的 Shell,支持更强大的命令补全和自动化功能。
- Ksh (Korn Shell): 另一种强大的 Shell,具有更强的脚本编写功能。
2. C shell:此shell的提示符为%,其子类别为:
C Shell也称为csh
Tops C shell也称为tcsh
在本教程中,我们将讨论基于bash shell的shell脚本。
三)什么是 Shell 脚本语言?
shell脚本语言是一种为 shell 编写的脚本程序,该程序有一系列命令供Shell执行的脚本。 它可以将冗长而重复的命令序列组合成一个简单的脚本,该脚本可以随时存储和执行。 这减少了最终用户所需的工作量。Linux 内部的很多应用(有的是应用的一部分)都是使用 Shell 脚本开发的,因为有 1000 多个 Linux 系统命令为它作支撑,特别是 Linux 正则表达式以及三剑客 grep、awk、sed 等命令。
要编写一个简单的 Shell 脚本,可以按照以下步骤进行:
使用文本编辑器(如 vim
, nano
, gedit
等)创建一个新的脚本文件。
3.1 文本编辑器
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
在 Linux 系统中,有多种文本编辑器可供使用,从简单的基于命令行的编辑器到功能丰富的图形化编辑器。以下是一些常见的 Linux 文本编辑器:
命令行文本编辑器
- Vim:
- 功能强大且广泛使用,支持语法高亮、脚本编写等高级功能。
- Vim 是 Vi 编辑器的增强版,支持插件和自定义配置。
- Nano:
- 简单易用,适合新手。
- 支持基本的文本编辑功能,键盘快捷键提示非常友好。
- Emacs:
- 高度可扩展,支持多种编程语言。
- 除了文本编辑,还能进行编程、邮件管理、新闻阅读等多种操作。
- Sed:
- 流编辑器,用于对文件或数据流进行文本处理。
- 常用于脚本和自动化任务。
- Awk:
- 适用于文本处理和报告生成。
- 强大的模式匹配和数据处理功能。
图形化文本编辑器
- Gedit:
- GNOME 桌面环境的默认文本编辑器。
- 简洁直观,支持语法高亮和插件扩展。
- Kate:
- KDE 桌面环境的高级文本编辑器。
- 支持多种语言语法高亮、分屏编辑等高级功能。
- Leafpad:
- 轻量级文本编辑器,启动速度快,适合基本的文本编辑任务。
- Sublime Text:
- 功能强大的跨平台文本编辑器,支持丰富的插件系统。
- 适用于代码编写和文本编辑。
- Visual Studio Code:
- 由微软开发的免费跨平台编辑器,功能强大且扩展性强。
- 支持调试、Git 集成、语法高亮和丰富的插件生态。
这些编辑器涵盖了从简单文本编辑到复杂编程任务的各种需求,你可以根据自己的习惯和需求选择合适的编辑器。
3.2 脚本解释器
#!
是一个叫做shebang的运算符,它将脚本定向到解释器位置。详细解释请看:linux 脚本解释器
因此,如果我们使用“#/bin/sh
”,脚本将定向到bourne-shell。
当你首次启动 shell(特别是 Bash shell)时,它会读取一些初始化文件来设置你的环境,并自定义 shell 的行为。两个关键的文件是:
.bashrc
:这个文件在非登录的交互式 shell 中执行,例如当你打开一个终端窗口时。你可以通过在此文件中添加函数、别名和环境变量来自定义你的环境。.bash_profile
(或.profile
):这个文件在登录 shell 中执行,也就是说,当你登录系统或打开一个新的会话时会运行它。如果.bash_profile
不存在,Bash 会寻找.profile
文件。
你可以在这些文件中进行的常见自定义包括:
- 设置环境变量(例如,
export PATH
) - 定义命令别名(例如,
alias ll='ls -l'
) - 在 shell 启动时运行自定义脚本
- 调整提示符的外观
在修改这些文件后,你可以重新启动终端,或者运行 source ~/.bashrc
或 source ~/.bash_profile
来使更改在当前会话中生效。
3.3 创建一个脚本文件scriptexample.sh
现在,我们创建一个脚本文件scriptexample.sh
首先,用下述命令产生一个文件:
vi scriptexample.sh
#!/bin/sh ls
进入上述两行,然后保存并退出。
3.4 赋予执行权限
在终端中赋予脚本执行权限:
chmod +x scriptexample.sh
3.5 运行脚本
在终端中执行脚本:
bash scriptexample.sh or ./scriptexample.sh
上图为运行结果。
你的第一个shell脚本文件已经完成了,很容易吧。
3.6 Shell脚本语言的注释行
作为一个程序员,对脚本注释是非常重要的。这是一个团队工作,别人必须知道你干什么,为什么这样干。
和别的程序一样,脚本文件的注释用 # 开始,编译器不支持改行。
# this is a explanation of my following line
四) Shell 脚本的基本语法
4.1 变量
可以在脚本中定义变量,并使用 $
符号引用它们:
name="John" echo "Hello, $name!"
结果:
Hello, John!
4.2 条件判断
Shell 脚本支持 if-else
结构进行条件判断:
if [ "$name" == "John" ]; then echo "Welcome, John!" else echo "Who are you?" fi
4.3 循环
Shell 脚本支持 for
和 while
循环:
for i in 1 2 3 do echo "Number: $i" done
结果:
Number: 1 Number: 2 Number: 3
4.4 函数
可以在 Shell 脚本中定义和调用函数:
greet() { echo "Hello, $1!" } greet "Alice"
结果:
Hello, Alice!
五)常用的 Shell 脚本功能
- 文件操作: 创建、删除、移动和复制文件和目录。
- 文本处理: 使用
grep
,awk
,sed
等工具处理文本数据。 - 系统管理: 监控系统状态,管理用户和进程。
- 自动化任务: 定时执行任务、备份数据、更新系统等。
六) 执行 Shell 脚本的方法
可以通过以下几种方式执行 Shell 脚本:
- 直接运行: 通过
./scriptname.sh
直接运行脚本。 - 通过 Shell 解释器运行: 例如
bash scriptname.sh
或sh scriptname.sh
。 - 在脚本中调用: 可以在一个脚本中调用另一个脚本。
七)实际应用示例
一个简单的备份脚本:
#!/bin/bash src="/home/user/documents" dest="/backup/documents" echo "Starting backup..." cp -r $src $dest echo "Backup completed!"
这个脚本会将 /home/user/documents
目录下的所有文件备份到 /backup/documents
目录中。
Shell 脚本是一种非常灵活且功能强大的工具,可以用于自动化各种任务。通过 Shell 脚本,用户可以提高工作效率,减少重复劳动,并轻松管理系统资源。如果你刚刚开始学习 Shell 脚本,建议多编写一些小的脚本来熟悉它的语法和功能。
摘要:
- 内核是操作系统的核心,它在硬件和软件之间进行通信
- Shell是一个应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务
- Bourne Shell和C Shell是Linux中最常用的Shell
- shell脚本是一种为 shell 编写的脚本程序,该程序有一系列命令供Shell执行的脚本
- Shell变量存储字符串或数字的值以供Shell读取
- Shell脚本可以帮助您创建一些复杂程序,这些程序可以包含条件声明,循环语句和函数。
外壳脚本(英语:Shell script),又称Shell脚本、Shell命令稿、程式化脚本,是一种电脑程式使用的文字档案,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。
被当成是一种脚本语言来设计,其运作方式与直译语言相当,由Unix shell扮演命令行直译器的角色,在读取shell脚本之后,依序执行其中的shell命令,之后输出结果。利用shell脚本可以进行系统管理,档案操作等。
在Unix及所有的类Unix系统中,如Linux、FreeBSD等作业系统,都存在shell脚本。依照Unix shell的各种不同类型,shell脚本也有各种不同方言。在DOS、OS/2、Microsoft Windows中的批次档,跟shell脚本有类似的功能。
根据定义,shell是一个解释环境,你在其中执行命令。它为用户提供了一个界面,并接受人类可读的命令进入系统,执行那些可以自动运行的命令,并给出程序的输出。当你运行终端时,Shell会发出**一个命令提示(通常是$),**你可以在那里输入你的输入(命令),然后在你点击Enter键时执行。此后,输出或结果将显示在终端上。考虑一下下面的图片,在发出ls命令时,它将列出所有的项目。
作者:方石剑