如何编写和使用文本批处理命令文件

如何编写和使用文本批处理命令文件

我如何编写并使用典型的文本批处理命令文件?

我正在谈论一个包含以下命令的文件:

sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit

我想我可以用 Leafpad 来写它,但是......

  1. 我必须将其保存在哪里?

  2. 哪种格式?哪种名称和扩展名?

  3. 之后,我如何在 LXTerminal 会话中仅使用一个订单来使用它(理想情况下如果有一种方法可以在每次系统启动时自动使用它)?

非常感谢您抽出时间!

答案1

在类 Unix 世界中没有“批处理”文件。我们使用包含“she-bangs”的脚本。要制作这样的脚本,请打开文本编辑器(如 Leafpad)并从以下行开始:

#!/path/to/interpreter

/path/to/interpreter用于解释脚本的二进制文件的位置在哪里。在 Linux 中,我们通常使用“bash”(Bourne Again SHell),它是 Bourne Shell 的“进化版”。bash 的作用基本上是从 PATH 环境变量中包含的路径(通常包括 /bin、/sbin、/usr/bin、/usr/sbin 等)运行脚本中指定的参数的二进制文件。

但是您也可以使用其他解释器,例如 Python、Perl、Ruby、sh、csh、zsh、dash、ksh,以及大量选项。

接下来是您的脚本。在您的特定情况下,要运行指定的命令,我们可以使用 bash,脚本如下:

#!/bin/bash

# the line above sets bash as the interpreter

# note that "sudo" is not required here because we will run the script as super user later.

apt-get update
# updates APT repositories

apt-get upgrade
# check for software upgrades and upgrade them

apt-get autoremove
# remove obsolete packages

apt-get autoclean
# remove stored .deb files

apt-get check
# update package cache and check for broken dependencies

现在保存文件。不需要扩展名,但出于符号原因,请使用 .sh 扩展名命名。我们将以超级用户身份运行脚本,因此无需更改文件权限。

打开终端并进入保存脚本的路径。假设您将其保存为 script.sh。运行以下命令:

chmod +x script.sh

chmod表示“更改模式”,用于更改谁可以对脚本执行什么操作。+x为所有用户添加执行权限,允许任何人像运行其他程序一样运行脚本。我不会详细列出所有不同权限的含义,但这个问题总结得相当好。之后,您可以输入:

sudo ./script.sh

不要忘记 ./ 部分,并且不要在 .、/ 和 s 之间留任何空格。该sudo命令将以 root 权限运行./script.sh,因此需要您的密码(当然,您必须是系统管理员)。

答案2

在 Windows 世界中被称为“批处理”文件,在 *NIX 世界中被称为“脚本”。大多数情况下,脚本是一个包含多个命令或以特定方式排列的命令的文件。以下是您应该了解的几件事:

基本结构

通常你会看到类似这样的内容:

#!/bin/sh
# Comments 
printf "Hello world"

第一行指定解释器(通常称为shebang行),第二行是注释(其后的任何内容#均不解释,只是纯文本),第三行是实际命令

在终端中,您可以调用没有 shebang 行的文件。这将导致脚本被您当前的 shell(又名命令解释器)读取和解释。例如,我正在运行mkshshell。我指定#!/bin/sh它将由 Ubuntu 的默认 shell - 运行dash。每个 shell 都有一些关于其命令语法的细节,因此您必须相应地定制您的脚本。

编写脚本

这必须在文本编辑器中完成,但您也可以在 LibreOffice Writer 中编写,然后以纯文本形式保存。就我个人而言,我只使用命令行文本编辑器(nano大部分情况下vim);这里的类比是editWindows 7 之前的 Windows 版本。

在 *NIX 系统上,文件名和扩展名无关紧要,因为系统会读取文件的前几个字节来确定其类型。我习惯添加.sh扩展名,但实际上 - 这是不必要的。

使脚本可执行

chmod 755 scriptName.sh这是使用命令进行的。这意味着read-write-execute所有者(您)read-execute拥有属于所有者组的用户(例如,文件所有者可能是admin,因此如果您属于admin该组,则可以读取和执行文件)以及read-execute其他任何人的权限。切勿向他人授予写入权限!如果您拥有超级用户权限,则可能会导致一些不良后果(也就是说,您可能会被黑客入侵,恶意用户会更改您的脚本,以便保留您的个人信息)。

运行脚本

您可以随时通过导航到终端中的脚本位置并输入来运行脚本./scriptName

要在任何地方运行任何命令(包括脚本),它们必须存储在系统上的某个位置,并包含在变量中$PATH。我的意思是:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin

$PATH变量告诉我,如果脚本或可执行二进制文件位于/usr/local/sbin/usr/local/bin或任何其他目录中,我只需在终端中输入该命令即可运行该命令。

现在,对于您自己的脚本,您应该创建bin文件夹,并将脚本存储在那里。如果您使用的bash配置.profile文件包含以下几行:

# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
#    PATH="$HOME/bin:$PATH"
#fi

如果取消注释(删除#)最后三行(从iffi),您的个人bin文件夹将被纳入$PATH变量。

相关内容