2016-11-27 224 views
0

我的电脑的操作系统是ubuntu 14.04,我想写一个脚本来自动安装一些软件,我需要判断它没有安装过,例如,我想 判断google-chrome是否安装,代码如下:如何使用shell来判断软件是否已安装?

if [ !which google-chrome #I knoe this way was wrong] 
do 
    download it 
    sudo dpkg -i google-chrome*.deb 
done 
fi 

我知道判断代码如果[]是错的,你能告诉我怎么判断它没有安装使用shell?

+0

我不认为这是一个好主意。我会使用'aptitude search'然后'aptitude install' –

+0

你可以为exeample判断谷歌浏览器使用shell @Basile Starynkevitch –

+0

你应该更多地激发你的问题并给出更具体的上下文(** why **你想这样做很重要,所以**编辑你的问题**来改善它)。我的回答给出了一些线索。 –

回答

1

您可以使用dpkg检查包名称的状态,它会告诉你,如果它没有安装,或者如果它不活跃,等等

+0

你可以告诉我一个示例代码如何判断它使用if []例如google-chrome? –

2

注意which正在搜索PATH variable。见this。给定的用户可能有他的$PATH中提到的目录(如$HOME/bin//usr/local/bin/ ...),这些目录不是也不应该由包装系统管理。

不要忘记,Linux的核心是一个multi-user系统。例如,我的妻子和我的儿子可以使用同一台PC。不同的用户可能会有不同的设置,因此会使用不同的程序集(例如,通过execvp(3)或从其shell中调用的等效项)。

我不认为你应该安装在系统层面上,该google-chrome-stable包,如果用户有一些自己的google-chrome程序(例如在他$HOME/bin/,安装将向您介绍一些其他程序),但你(甚至可能你的用户)应该决定你将在这种情况下做什么。

我反而测试,如果已安装的google-chrome-stable包(但后来,你正在做的事情不同,你所问的)。

或许你会测试

if dpkg -l google-chrome-stable >& /dev/null ; then 
    echo google-chrome-stable is installed 
fi 

顺便说一句,我不认为自动安装任何包,而无需用户的明确和事先同意是一个好主意。你应该建议他安装(这是一个非常不同的问题,可能是在shell中智能自动完成的问题)。

在我的Debian系统,/usr/bin/google-chrome是一个符号链接/etc/altneratives/google-chrome这是一个符号链接/usr/bin/google-chrome-stable这是一个符号链接/opt/google/chrome/google-chrome。所以,我也可以使用realpath(1)

if dpkg -S $(realpath $(which google-chrome)) >& /dev/null ; then 
    echo some package gives google-chrome 
fi 
相关问题