jum*_*ett 46 command-line apt scripts software-installation
有谁知道如何编写 shell 脚本来安装应用程序列表?每次设置新系统时都必须手动安装每个应用程序,这很痛苦。
编辑:
它仍然问我Do you want to continue [Y/n]?。有没有办法让脚本输入y或不提示输入?
Mic*_*haw 44
我假设脚本看起来像这样:
#!/bin/sh
apt-get update # To get the latest package lists
apt-get install <package name> -y
#etc.
Run Code Online (Sandbox Code Playgroud)
只需将其另存为 install_my_apps.sh 之类的内容,更改文件的属性以使其可执行,然后以 root 身份从命令行运行它。
(编辑:该-y通知apt-get没有提示你,只是获得与安装)
qbi*_*qbi 22
好吧,根据您的问题,最简单的脚本是:
#!/bin/sh
LIST_OF_APPS="a b c d e"
aptitude update
aptitude install -y $LIST_OF_APPS
Run Code Online (Sandbox Code Playgroud)
但是,您也可以输入aptitude update && aptitude install -y a b c d e. 所以也许你的问题错过了这里的关键点。如果有一些进一步的要求,最好解释一下。
And*_*son 14
只需在文件 example.list 中创建应用程序列表,然后运行
cat example.list | xargs sudo apt-get -y install
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
set -eu -o pipefail # fail on error and report it, debug all lines
sudo -n true
test $? -eq 0 || exit 1 "you should have sudo privilege to run this script"
echo installing the must-have pre-requisites
while read -r p ; do sudo apt-get install -y $p ; done < <(cat << "EOF"
perl
zip unzip
exuberant-ctags
mutt
libxml-atom-perl
postgresql-9.6
libdbd-pgsql
curl
wget
libwww-curl-perl
EOF
)
echo installing the nice-to-have pre-requisites
echo you have 5 seconds to proceed ...
echo or
echo hit Ctrl+C to quit
echo -e "\n"
sleep 6
sudo apt-get install -y tig
Run Code Online (Sandbox Code Playgroud)
解释:
set -eu -o pipefail命令:
| 命令元素 | 解释 |
|---|---|
set |
修改shell环境的运行方式 |
-u |
如果变量不存在,则报告错误并停止(例如,未绑定的变量) |
-e |
每当发生错误时终止(例如,未找到命令) |
-o pipefail |
如果子命令失败,则整个管道命令失败,终止脚本(例如,找不到命令) |
如果此脚本遇到任何错误,它将失败并退出。
参考:https: //www.tutorialdocs.com/article/set-command-in-bash.html
sudo -n true命令:
| 命令元素 | 解释 |
|---|---|
sudo |
以超级用户身份运行 |
-n |
非交互式。防止sudo提示输入密码。如果需要,sudo显示一条错误消息并退出 |
true |
返回成功(零)退出状态的内置命令 |
以超级用户身份运行并且不要求输入密码。退出状态为成功。
参考: https: //linux.die.net/man/8/sudo,https : //linux.die.net/abs-guide/internal.html
test $? -eq 0 || exit 1 "you should have sudo privilege to run this script"命令:
| 命令元素 | 解释 |
|---|---|
test |
将表达式作为参数,将其计算为“0”( true) 或“1”( false),并将结果返回到 bash 变量$? |
$? |
用于查找返回值作为最后执行命令的退出状态的变量 |
-eq |
等于 |
0 |
值结果为真 |
|| |
逻辑“OR”是布尔运算符。它可以根据另一个命令的退出状态执行命令或 shell 函数 |
exit |
以状态 N 退出 shell。如果未指定 N,则使用最后执行的命令的退出代码 |
1 |
值结果为 false,此处用作退出命令的参数以用作退出代码 |
"you should have sudo privilege to run this script" |
如果退出代码为 false,则将此消息打印到终端 |
测试最后一个变量的退出代码并查看它是否等于“0”。如果没有,则退出并显示错误并将给定消息打印到终端。
参考: https: //linuxhint.com/bash-test-command/,http : //tldp.org/LDP/abs/html/exit-status.html#EXSREF,https : //bash.cyberciti.biz/guide /Logical_OR,https://linuxize.com/post/bash-exit/
echo installing the must-have pre-requisites命令:
| 命令元素 | 解释 |
|---|---|
echo |
用于将信息或消息打印到终端的内置命令 |
installing the must-have pre-requisites |
要打印到终端的消息 |
告诉用户在安装实际程序之前将安装一些必备软件包。
参考: https: //linuxhint.com/bash_echo/
while read -r p ;命令:
| 命令元素 | 解释 |
|---|---|
while |
创建一个 while 循环,即只要给定的条件计算结果为真,就无限地执行给定的命令集 |
read |
从标准输入读取一行并将其存储在变量中 |
-r |
传递给命令的选项read可避免反斜杠转义被解释 |
p |
read用于存储捕获的输入的任意变量。这里代表每个要安装的包 |
; |
控制运算符 AND。继续执行下一个命令,无论上一个命令的退出状态如何(即使上一个命令失败也执行) |
永远逐行读取给定文件或直到收到“false”值,然后继续执行后续命令。
参考:https: //linuxize.com/post/bash-while-loop/,http : //linuxcommand.org/lc3_man_pages/readh.html,https : //linuxhint.com/while_read_line_bash/,https : //pubs。 opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_09
do sudo apt-get install -y $p ;命令:
| 命令元素 | 解释 |
|---|---|
do |
保留字用于分隔后面的命令序列。即开始 |
apt-get |
Debian APT(高级软件包工具)软件包管理器使用的工具 |
install |
用于安装软件包的命令 |
-y |
长形式是--yes. 在所有查询提示中假设“是” |
$p |
用于调用任意变量p并将read其用作标准输入 |
以超级用户身份安装软件包列表,而不提示确认安装。
参考: https: //itsfoss.com/apt-get-linux-guide/
done < <(cat << "EOF" <list of packages> EOF)命令:
| 命令元素 | 解释 |
|---|---|
done |
保留字用于分隔前面的命令序列。即,停止 |
< |
重定向到标准输入 |
cat |
连接。用于查看、创建和附加文件 |
<< |
重定向,从当前源读取输入,直到遇到分隔符,然后使用这些行作为命令的标准输入 |
EOF |
文件结束分隔符 |
cat << EOF-EOF |
这将读取并打印EOF块中包含的所有内容 |
<(list) |
获取列表的输出;括号表示该列表将在子 shell 环境中执行 |
读取包列表并将它们收集为标准输入。将其重定向到read命令,该命令将其捕获为p变量,然后将其发送到$p变量,这允许它由命令执行install,并且当它到达EOF分隔符时,重定向输出以done有效结束while read循环。
参考: https: //linuxhint.com/cat-command-bash/,https : //linuxhint.com/what-is-cat-eof-bash-script/
以下四个echo消息是不言自明的:
echo installing the nice-to-have pre-requisitesecho you have 5 seconds to proceed ...echo orecho hit Ctrl+C to quit然而,下一个却不是。
echo -e "\n"命令:
| 命令元素 | 解释 |
|---|---|
-e |
启用反斜杠字符功能 |
\n |
新行的反斜杠转义序列 |
该命令创建一个换行符。
sleep 6命令:
| 命令元素 | 解释 |
|---|---|
sleep |
延迟 bash 脚本的执行,通常延迟 N 秒,除非使用选项来指示更长的时间长度 |
延迟执行以下命令 6 秒。
参考:https: //linuxhandbook.com/bash-sleep/
sudo apt-get install -y tig命令:
tig以超级用户身份运行安装时,使用 Debian工具安装软件包apt-get,并且不提示确认。
一般参考资料:
| 归档时间: |
|
| 查看次数: |
136778 次 |
| 最近记录: |