我如何编写并使用典型的文本批处理命令文件?
我正在谈论一个包含以下命令的文件:
sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit
我想我可以用 Leafpad 来写它,但是......
我必须将其保存在哪里?
哪种格式?哪种名称和扩展名?
之后,我如何在 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(又名命令解释器)读取和解释。例如,我正在运行mksh
shell。我指定#!/bin/sh
它将由 Ubuntu 的默认 shell - 运行dash
。每个 shell 都有一些关于其命令语法的细节,因此您必须相应地定制您的脚本。
编写脚本
这必须在文本编辑器中完成,但您也可以在 LibreOffice Writer 中编写,然后以纯文本形式保存。就我个人而言,我只使用命令行文本编辑器(nano
大部分情况下vim
);这里的类比是edit
Windows 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
如果取消注释(删除#
)最后三行(从if
到fi
),您的个人bin
文件夹将被纳入$PATH
变量。