#!/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
我会假设脚本看起来像这样:
只需将其保存为 install_my_apps.sh 之类的文件,更改文件的属性以使其可执行,然后以 root 身份从命令行运行它。
(编辑:告诉
-y
不要apt-get
提示你,继续安装)好吧,根据您的问题,最简单的脚本是:
但是,您也可以输入
aptitude update && aptitude install -y a b c d e
. 所以也许你的问题在这里错过了关键点。如果有一些进一步的要求,最好解释一下。只需在文件 example.list 中创建应用程序列表,然后运行
说明:
set -eu -o pipefail
命令:set
-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
true
) 或 '1' (false
),并将结果返回给 bash 变量$?
$?
-eq
0
||
exit
1
"you should have sudo privilege to run this script"
测试最后一个变量的退出代码,看看它是否等于“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
read
-r
read
命令的选项可避免反斜杠转义被解释p
read
用于存储捕获输入的任意变量。这里它代表要安装的每个包;
永远逐行读取给定文件或直到收到“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
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)
阅读软件包列表并将它们收集为标准输入。将其重定向到
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-requisites
echo you have 5 seconds to proceed ...
echo or
echo hit Ctrl+C to quit
但是,下一个不是。
echo -e "\n"
命令:-e
\n
此命令创建一个换行符。
sleep 6
命令:sleep
延迟执行以下命令 6 秒。
参考:https ://linuxhandbook.com/bash-sleep/
sudo apt-get install -y tig
命令:tig
以超级用户身份运行安装时使用 Debian工具安装软件包apt-get
,并且不提示确认。一般参考:
我会选择以下脚本:
vim install
然后我应该使上面的脚本可执行
chmod +x install
。然后要使用它,我可以输入:./install <package_name>
. 例子:./install clang