什么是shell脚本,为什么要使用它

除了能够以交互方式接受和执行命令外,shell还可以执行存储在文件中的命令。这称为shell脚本。这里我们将介绍shell脚本的基础知识。...

shell是Linux或Unix操作系统中的一个程序,它允许您输入命令供系统执行。当在linux计算机上打开终端窗口时,它启动shell程序,该程序提供一个输入命令的界面。此接口称为命令行接口。输入命令后,shell将执行该命令,并在屏幕上显示输出。

shell-scripting

除了能够以交互方式接受和执行命令外,shell还可以执行存储在文件中的命令。这种执行模式称为shell脚本,本文将介绍shell脚本的基础知识。

1贝壳的历史

从20世纪70年代的Unix开始,Ken Thomson开发了一个名为v6shell的shell程序。它是一个交互式shell,缺乏脚本能力。

1977年,bourneshell紧随其后,至今仍作为root帐户的默认Shell使用。这个shell增加了脚本能力,这在多年的实践中证明是非常有用的。

壳牌在20世纪80年代的进一步发展催生了许多流行的壳牌变种,其中最流行的是C-shell和Korn shell。这些shell中的每一个都有自己的语法,在某些情况下,这些语法与原始shell截然不同。

今天最流行的Shell之一是Bash Shell。Bash代表Bourne Shell,是原始Bourne Shell的一个大大改进的变体。

在本文中,我们将描述bashshell的shell脚本。

2执行shell脚本

如何执行shell脚本?很简单。只需将脚本路径作为参数传递给shell:

示例shell脚本:

echo "hello world"

按如下方式运行:

$ bash hello.sh
# prints
hello world

注意:shell要求行以LF字符结尾(换行符)。如果您在Windows上编写shell脚本,并试图直接在Linux系统上执行,则可能会出错。Windows使用CR-LF组合(回车换行)进行换行。这只需要转换成LF。请检查您的Windows编辑器,以了解执行此操作的方法。

还有另一种方法可以直接作为命令执行shell脚本。**以下行(hashbang声明)作为shell脚本的第一行。

#!/bin/bash

通过此更改,我们的简单shell脚本现在是:

#!/bin/bash
echo "hello world"

现在,您需要使脚本文件可执行,如下所示:

$ chmod +x hello.sh

此时,可以直接执行脚本文件,而不必显式引用shell。

$ hello.sh
# prints
hello world

现在让我们看看使用shell脚本的一些优点。

三。任务自动化

使用shell脚本的第一个优点是自动化频繁执行的任务。假设你每天都要做一件事。如果您每天需要在linux系统上执行多个命令,可以将这些命令存储在一个文件中并运行脚本。示例包括:

  • 每天归档并上传一个文件或文件夹到一个云存储设施,比如S3。
  • 压缩每天都在增长的日志文件。
  • 获取股票价格,解析获取的数据,并在满足某些条件(价格过高或过低)时触发电子邮件或短信。

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
fi
fi
# 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 i
fi

5更容易开发

在C/C++中编写的常规程序中,可以执行与shell脚本相同的操作。但是,编写和调试shell脚本比C/C++程序要容易得多。特别是对于系统管理任务,包括执行外部命令、创建和删除文件和目录、重定向输出等。

C/C++程序对于较低的操作水平更好,例如调用系统调用、操作数据结构等。

6透明度

由于shell脚本是一个文本文件,因此可以很容易地查看它执行的操作。相比之下,只有这样,你才能知道用C++(如编译为可执行文件)的语言编写的程序是在选择告诉你还是访问源代码。例如,可以检查shell脚本是否正在删除任何文件,如果需要这些文件,可以将它们复制到其他位置。

使用shell脚本诊断问题也比使用常规程序容易得多,因为您可以查看源代码。脚本失败是因为目录不存在吗?您可以查看脚本代码并创建目录(尽管行为良好的shell脚本应该检查并创建它以避免此类错误)。

7便携式的

shell脚本可以传输到其他Unix和类Unix操作系统并执行(如果存在shell本身)。即使在从X86、MIPS、SPARC等不同架构中传输shell脚本时,shell脚本也比C/C++程序更便携。

C/C++程序可以在另一个系统上传输和使用的唯一方法是复制源代码,构建程序,并尝试运行它。即使如此,如果它使用特定于体系结构的代码,它也可能无法按预期工作。

既然您已经知道了shell脚本是什么以及它们的许多优点,您不想在任务中使用它们吗?您在使用它们时遇到了哪些问题?请在下面的评论中告诉我们。

  • 发表于 2021-03-13 04:53
  • 阅读 ( 248 )
  • 分类:编程

你可能感兴趣的文章

5个有用的vb windows脚本,可自动使用计算机

...任何操作。如果它返回“1”,那么ping失败,您需要做些什么。在我的例子中,我使用Windows CDO对象发送电子邮件: ...

  • 发布于 2021-03-11 20:14
  • 阅读 ( 418 )

使用简单的shell脚本修复html格式

... 为什么使用shell脚本?如果你是编程新手,从小事做起会更好。不仅你不太可能放弃,而且你还有机会停下来学习。也就是说,你的第一个程序可以非常有用,即使它们也...

  • 发布于 2021-03-13 00:12
  • 阅读 ( 237 )

如何使用applescript将bash脚本转换为可单击的应用程序

假设你是一个bash脚本向导,喜欢为不太懂技术的朋友和家人自动化任务。即使你给了他们一个脚本,完全解决了他们的问题,他们可能仍然担心自己使用终端。在这种情况下,您不妨手动为它们执行所有操作。 ...

  • 发布于 2021-03-21 09:39
  • 阅读 ( 249 )

如何使用“helloworld”脚本开始使用python

... 但是,为什么每个人都用“Hello,World”而不是“Hey,World”或“Hiya,World”? ...

  • 发布于 2021-03-28 01:18
  • 阅读 ( 307 )

在linux中,“bash”是什么意思?

...终端仿真器绝对是两个不同的应用程序。那么Bash到底是什么呢?在这篇短文中,我们将探讨Bash是什么,它做什么,以及如何开始使用它。 ...

  • 发布于 2021-03-28 13:14
  • 阅读 ( 451 )

哪个linux shell最好?比较了5种常见的贝壳

... 什么是linux shell(a linux shell)? ...

  • 发布于 2021-03-30 18:45
  • 阅读 ( 372 )

如何使用受限shell来限制linux用户可以做什么

受限的shell限制了用户帐户在Linux上可以做什么。受限用户不能更改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Kor...

  • 发布于 2021-03-31 10:57
  • 阅读 ( 386 )

如何使用chsh在linux上更改默认shell

...使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境,允许您键入命令和运行程序。shell检查您的输入并找出您想要的内容。如果它能执行你的出价本...

  • 发布于 2021-04-02 06:04
  • 阅读 ( 337 )

如何在linux上的bash中设置环境变量

...关闭child bash会话,请使用exit: exit 继承的环境也会影响脚本。下面是一个简单的脚本,它将三个环境变量的值写入终端窗口: #!/bin/bash
 
 echo "WEBSITE" $WEBSITE
 echo "LOCAL_VAR" $LOCAL_VAR
 echo "INHERITED_VAR" $INHERITED_VAR 这被保...

  • 发布于 2021-04-02 06:44
  • 阅读 ( 220 )

如何在linux上使用cd命令

...尾随的正斜杠,这样就可以重复制表符完成过程。这也是为什么第一个命令后面有一个正斜杠。第二张没有,因为那张是打出来的。 您可以使用波浪号(~)作为从文件系统中任意位置快速返回主目录的速记方式;只需键入以下...

  • 发布于 2021-04-02 08:58
  • 阅读 ( 172 )
zxcb834
zxcb834

0 篇文章

相关推荐