shell是Linux或Unix操作系统内的程序,可让您输入命令以供系统执行。在Linux计算机上打开终端窗口时,它将启动shell程序,该shell程序提供输入命令的界面。该界面称为命令行界面。输入命令后,该命令将由外壳程序执行并在屏幕上显示输出。
除了能够交互接受和执行命令外,外壳程序还可以执行存储在文件中的命令。这种执行模式称为 shell脚本,在本文中,我们介绍了shell脚本的基础。
1。 Shell的历史
从1970年代的Unix开始,有一个由Ken Thomson开发的名为 V6 Shell 的Shell程序。它是一个交互式shell,缺乏脚本编写能力。
紧随其后的是1977年的 Bourne Shell ,至今仍用作 root 的默认shell。强>帐户。这种shell增加了脚本编写功能,多年来证明在实践中非常有用。
1980年代shell的进一步发展产生了许多流行的shell变体,其中最流行的是 C -Shell 和 Korn Shell 。每个shell都有自己的语法,在某些情况下,它们与原始shell完全不同。
当今最受欢迎的shell之一是 Bash Shell 。 Bash代表 Bourne-Again-Shell ,它是原始Bourne Shell的极大改进。
在本文中,我们描述了Bash Shell的shell脚本。
2。执行Shell脚本
如何执行Shell脚本?简单。只需将脚本路径作为参数传递给shell:
一个示例shell脚本:
echo "hello world"
按如下所示运行它:
$ bash hello.sh# printshello world
注意:外壳程序要求以LF字符(换行)结尾的行。如果您在Windows上编写Shell脚本并尝试直接在Linux系统上执行它,则可能会遇到错误。 Windows使用CR-LF组合(Carriage-Return-Line-Feed)进行线路终止。这仅需要转换为LF。检查Windows编辑器以了解执行此操作的方法。
还有另一种直接将Shell脚本作为命令执行的方法。插入以下行(
#!/bin/bash
进行此更改后,我们的简单shell脚本现在为:
#!/bin/bashecho "hello world"
现在,您需要使脚本文件可执行如下:
$ chmod +x hello.sh
此时,您可以直接执行脚本文件,而不必显式引用外壳程序。
$ hello.sh# printshello world
现在让我们看一下使用shell脚本的一些优点。
3。任务自动化
使用shell脚本的第一个优点是使经常执行的任务自动化。假设您有一项每天需要执行的任务。如果您需要每天在Linux系统上执行多个命令,则可以将这些命令存储在文件中并运行脚本。示例包括:
4。组合多个命令
除了自动执行频繁的任务,您还可以发现将多个命令序列组合为一个命令的优势。记住单个命令比多个命令简单得多,更不用说它们必须执行的顺序。
一个例子就是Linux操作系统本身的启动顺序。作为启动的一部分,操作系统执行许多命令以使系统进入正确的状态。这些命令实际上是位于 / etc 目录下的shell脚本。如果您看一看这些shell脚本之一,您将认识到引导系统的复杂性,在没有shell脚本的情况下,您可能必须手动执行该操作。
以下是示例shell脚本 / etc / profile ,该脚本将在用户每次登录时执行。想象一下,手动键入这些命令!
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).if [ "$PS1" ]; then if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fifi# The default umask is now handled by pam_umask.# See pam_umask(8) and /etc/login.defs.if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset ifi
5。开发更容易
在用C / C ++编写的常规程序中,可以执行与Shell脚本相同的操作。但是,编写和调试Shell脚本要比C / C ++程序容易得多。特别是对于系统管理任务,包括执行外部命令,创建和删除文件和目录,重定向输出等。
C / C ++程序对于较低级别的操作(例如调用系统调用)更好。 ,操作数据结构等。
6。透明度
shell脚本由于是文本文件,因此可以轻松查看以检查其执行的操作。相比之下,您唯一知道用C / C ++等语言编写(并编译为可执行文件)的程序在做什么的唯一方法是选择告诉您还是您可以访问源代码。例如,您可以检查Shell脚本是否正在删除任何文件,并且如果需要这些文件,则可以将它们复制到其他位置。
使用Shell脚本诊断问题也要容易得多,而不是比常规程序要好,因为您可以查看源代码。该脚本是否因为目录不存在而失败?您可以查看脚本代码并创建目录(尽管行为良好的Shell脚本应检查并创建它以避免出现此类错误)。
7。可移植
shell脚本可以传输到其他Unix和类似Unix的操作系统并执行(如果存在shell本身)。即使从不同的体系结构(例如x86,MIPS,Sparc等)传输外壳程序脚本,外壳程序脚本也比C / C ++程序具有更高的可移植性。
C / C ++程序可以传输和在另一个系统上使用的是复制源代码,构建程序并尝试运行它。即使这样,如果使用特定于体系结构的代码,它也可能无法按预期工作。
标签: