Shell简介
学习Shell之前,我们先来认真的认识一下Shell,那么什么是Shell呢?
Shell俗称壳程序,是一种由C语言编写的用于和操作系统交互的命令解析器软件。它用来接收用户输入命令,然后调用相应的应用程序。
Shell同时又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
Shell 有两种执行命令的方式交互式和批处理,如下:
- 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。
- 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
通常我们会直接在终端中输入命令来执行,但更多的时候一些工作并不是一个命令就能处理完成的,需要多条命令以及根据不同输出结果判断再执行。这时候批处理,编写Shell脚本就是一个非常不错的方法。
Shell脚本和编程语言非常相似,有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。
常见 Shell
上一章节已经讲过,Shell 是一种脚本语言。那么,就必须要有对应的解释器来执行这些脚本。
Unix/Linux 上常见的 Shell 脚本解释器有 bash、sh、csh、ash、ksh、tcsh、zsh等几种,习惯上统称它们为Shell。我们常说有多少种 Shell,其实说的是 Shell 脚本解释器。
bash
bash 是 Linux 标准默认的 shell,本教程也基于 bash 讲解。bash 由 Brian Fox 和 Chet Ramey 共同完成,是 BourneAgain Shell 的缩写,内部命令一共有40个。
Linux 使用它作为默认的 shell 是因为它有诸如以下的特色:
- 可以使用类似 DOS 下面的 doskey 的功能,用方向键查阅和快速输入并修改命令。
- 自动通过查找匹配的方式给出以某字符串开头的命令。
- 包含了自身的帮助功能,你只要在提示符下面键入 help 就可以得到相关的帮助。
sh
sh 由 Steve Bourne 开发,是 Bourne Shell 的缩写,sh 是 Unix 标准默认的 shell。
csh
csh 是 Linux 比较大的内核,它由以 William Joy 为代表的共计47位作者编成,共有52个内部命令。该 shell 其实是指向 /bin/tcsh 这样的一个 shell,也就是说,csh 其实就是 tcsh。
ash
ash shell 是由 Kenneth Almquist 编写的,Linux 中占用系统资源最少的一个小 shell,它只包含24个内部命令,因而使用起来很不方便。
ksh
ksh 是 Korn shell 的缩写,由 Eric Gisin 编写,共有42条内部命令。该 shell 最大的优点是几乎和商业发行版的 ksh 完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。
注意:bash 是 Bourne Again Shell 的缩写,是 linux 标准的默认 shell ,它基于 Bourne shell,吸收了 C shell 和 Korn shell 的一些特性。bash 完全兼容 sh,也就是说,用 sh 写的脚本可以不加修改的在 bash 中执行。
tcsh
tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。
zsh
保罗·弗斯塔德(Paul Falstad)于1990年在普林斯顿大学求学时编写了Zsh的初版[4]。[5]名称zsh源于耶鲁大学教授邵中(Zhong Shao,后转为普林斯顿大学教授) — 保罗将教授的用户名"zsh"作为此Shell的名称。
zsh 是一款功能强大的 shell 软件,它可以兼容 bash,并且提供了很多高效的改进。
查看Shell
在Linux系统中,系统默认一般选用bash 作为系统标准默认的 shell。当然现在也有更多系统采用功能将大的zsh作为默认Shell。
你可以通过执行如下命令来查看系统支持的shell列表:
cat /etc/shells
一般默认输出:
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
如果你要查看当前系统使用的Shell,命令如下:
echo $SHELL
输出类似如下:
/bin/bash
说明当前系统使用的是bash作为默认的Shell。
进入Shell
Linux 早期没有图形界面的时候,那时候都是通过命令行界面,也就是Shell和系统进行操作交互。
通常Linux服务器也不会安装带有图形界面的Linux系统,我们常用的Linux服务器发行版有CentOS,REHL(Red Hat Enterprise Linux),Debian,Ubuntu Server等。在启动系统登录进入时,系统启动默认就是控制台默认,输入用户名密码登录成功后就进入系统的Shell了。
(Ubuntu 20.04 Server 示例)
对于带有不同桌面环境的Linux发行吧,通常可以通过使用工具中的终端(Terminal)来进入Shell,以CentOS为例,如下:
当然,不同的桌面环境中其终端软件所在目录也可能不同,使用的终端软件也不一样。例如,Gnome做桌面环境一般默认自带gnome terminal,而KDE桌面环境默认自带Konsole,Xfce桌面环境自带 xfce4-Terminal。
第一个Shell脚本
登录进入Shell中,我们可以通过系统默认自带的VI编辑器来创建第一个Shell脚本。当然,如果你是图形界面环境,你也可以使用一些比较好用的文本编辑器例如gedit等进行编辑。
这里还是建议你学习一下VI编辑器,登录Linux服务器很多时候都是非图形界面的,编辑文件常常会用到系统自带的Vi编辑器或者试Vi的加强版Vim,如果有兴趣你可以去学习一下Vim教程。
这里我们以使用Vim为例来创建第一个Shell脚本程序helloworld.sh
。大多数Linux系统默认自带Vi而不是Vim,如果要安装Vim,在Ubuntu和CentOS系统中,终端中命令分别如下:
Ubuntu
sudo apt-get install vim
CentOS
yum install vim -y
安装完成后,我们在终端中输入如下命令创建脚本文件。
vim helloworld.sh
进入vim后,这时候我们需要按一下键盘上的i
,编辑器才能进入插入模式,在插入模式下可以输入内容。
#!/bin/bash
echo "Hello World !"
输入如下内容后,按esc
键,推出插入模式,再按:wq
保存并退出vim。
当然对于新手来说,不熟悉vim编辑器操作的情况,你可以直接使用编辑器软件例如gedit进行编辑。
脚本文件helloworld.sh
我们已经编辑好,下面我们要执行它,这时候我们需要使用chmod命令给helloworld.sh
文件加上可执行权限。
chmod +x helloworld.sh
然后在终端中执行:
./helloworld.sh
注意:执行命令中的./
表示运行的试当前目录中的helloworld.sh文件,如果不加,系统会默认去PATH中的路径下找该文件,切记!
当然,你可以可以根据当前系统默认使用什么Shell来运行该脚本,如果默认是bash,我们可以这样运行:
bash hellowork.sh
注意:如果默认以Shell解释器名称开头来运行脚本,那么脚本中第一行的对使用解析器的声明就不用写了,因为你已经使用了指定的脚本解释器来运行该脚本。
这时候你就可以看到终端中输出了如下内容:
Hello World !
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/59233.html