请教shell脚本:判断系统版本,启动不同应用
- 百草谷居士
- 帖子: 3920
- 注册时间: 2006-02-10 16:36
- 系统: Mint21.1/Deepin20.8
请教shell脚本:判断系统版本,启动不同应用
为知笔记提供了两个不同的appimage版本,一个对应到ubuntu1804之前的版本,一个对应到1804及以后的版本。
这两个AppImage我都下载到了同一个文件夹,我想写一个脚本,自动判断操作系统版本,然后启动不同的应用程序。
求助!
这两个AppImage我都下载到了同一个文件夹,我想写一个脚本,自动判断操作系统版本,然后启动不同的应用程序。
求助!
debian 12 / 深度系统 20.9 / Mint 21.3
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
- astolia
- 论坛版主
- 帖子: 6445
- 注册时间: 2008-09-18 13:11
Re: 请教shell脚本:判断系统版本,启动不同应用
请自行研究lsb_release的用法
- 百草谷居士
- 帖子: 3920
- 注册时间: 2006-02-10 16:36
- 系统: Mint21.1/Deepin20.8
Re: 请教shell脚本:判断系统版本,启动不同应用
使用 lsb_release -r 可以输出当前系统版本号。
可是我没有shell编程经验,不知道如何捕获输出信息,如何截取,如何做条件判断
好吧,我太懒了,希望熟悉的人直接给出代码
可是我没有shell编程经验,不知道如何捕获输出信息,如何截取,如何做条件判断
好吧,我太懒了,希望熟悉的人直接给出代码
debian 12 / 深度系统 20.9 / Mint 21.3
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
-
- 论坛版主
- 帖子: 5230
- 注册时间: 2007-01-14 16:23
- careone
- 帖子: 839
- 注册时间: 2007-12-17 21:41
Re: 请教shell脚本:判断系统版本,启动不同应用
我电脑是 Debian, 无法确认 ubuntu 的 lsb_release 相关输出细节。先试运行,看输出是否正常。反馈时,请提供输出信息和相关必要细节
把第8,9行的两个数组值 appname, 改成要运行的两种版本对应的可执行文件。包括文件名和完整路径。
把第8,9行的两个数组值 appname, 改成要运行的两种版本对应的可执行文件。包括文件名和完整路径。
代码: 全选
#!/bin/bash
# original filename: run-by-verion.sh
OS_ID=`lsb_release -si` #sample: Debian
OS_VER=`lsb_release -sr` #sample: 10
OS_CODE=`lsb_release -sc` #sample: 10
declare -a appname
appname[0]="/usr/local/bin/app_old"
appname[1]="/usr/local/bin/app_u1804"
## debug datas ##
##appname[0]="lsb_release -i"
##appname[1]="lsb_release -r"
### body ###
#echo " check OS version: $OS_ID $OS_VER ($OS_CODE)"
echo " check OS version: "
echo
lsb_release -a
if [ "$OS_ID" = Ubuntu ]; then
case "$OS_VER" in
1[0-7].[0-1][0-9] | [4-9].[0-1][0-9] )
${appname[0]}
;;
18.04 | [1-9][4-9].[0-1][0-9])
${appname[1]}
;;
*) echo " Warnning 1: Unknown OS version ($OS_VER)" 1>&2
${appname[1]}
;;
esac
elif [ "$OS_ID" = Debian ]; then
case "$OS_VER" in
[0-9] | [1-9][0-9])
${appname[1]}
;;
*) echo " Warnning 2: Unknown OS version ($OS_VER)" 1>&2
${appname[1]}
;;
esac
else
echo " Error 3: Unkonw OS and version. quit" 1>&2
exit 1;
fi
exit 0;
#
_show_option_a () {
cat<<EOF
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
----
lsb_release -h
Usage: lsb_release [options]
Options:
-h, --help show this help message and exit
-v, --version show LSB modules this system supports
-i, --id show distributor ID
-d, --description show description of this distribution
-r, --release show release number of this distribution
-c, --codename show code name of this distribution
-a, --all show all of the above information
-s, --short show requested information in short format
EOF
}
魁拔不死,天下不宁。
魁拔既死,天下不平。
--------------
Careone <emacslocale^126.com>
https://sourceforge.net/projects/emacslocale/files/
魁拔既死,天下不平。
--------------
Careone <emacslocale^126.com>
https://sourceforge.net/projects/emacslocale/files/
- 百草谷居士
- 帖子: 3920
- 注册时间: 2006-02-10 16:36
- 系统: Mint21.1/Deepin20.8
Re: 请教shell脚本:判断系统版本,启动不同应用
谢谢!!shell语法好特别,没有看明白怎么回事。 有空自己拿python也写下。
debian 12 / 深度系统 20.9 / Mint 21.3
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
- 百草谷居士
- 帖子: 3920
- 注册时间: 2006-02-10 16:36
- 系统: Mint21.1/Deepin20.8
Re: 请教shell脚本:判断系统版本,启动不同应用
代码: 全选
#!/usr/bin/env python3
import os
getver='lsb_release -sr'
newcmd='~/opt/WizNote/WizNote-2.7.9-x86_64-ubuntu-18.04.AppImage'
oldcmd='~/opt/WizNote/WizNote-2.7.9-x86_64.AppImage'
info=os.popen(getver).readline()
ver=info.strip('\r\n')
if float(ver)>=18.04 :
os.system(newcmd)
else:
os.system(oldcmd)
debian 12 / 深度系统 20.9 / Mint 21.3
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
- astolia
- 论坛版主
- 帖子: 6445
- 注册时间: 2008-09-18 13:11
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 请教shell脚本:判断系统版本,启动不同应用
不建议使用 #!/usr/bin/env python3,因为很多人用虚拟环境,你不知道你的脚本会被哪个 Python 解释器执行。虽然你这段脚本没有依赖,不会出问题。百草谷居士 写了: ↑2020-01-06 20:58和python比起来,shell语法简直是变态代码: 全选
#!/usr/bin/env python3 import os getver='lsb_release -sr' newcmd='~/opt/WizNote/WizNote-2.7.9-x86_64-ubuntu-18.04.AppImage' oldcmd='~/opt/WizNote/WizNote-2.7.9-x86_64.AppImage' info=os.popen(getver).readline() ver=info.strip('\r\n') if float(ver)>=18.04 : os.system(newcmd) else: os.system(oldcmd)
不建议使用 os.popen。请使用 subprocess.check_output。
不建议使用 os.system。请使用 subprocess.check_call。
建议将代码放到一个 main 函数中调用。
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 请教shell脚本:判断系统版本,启动不同应用
建议跑一下 shellcheck O(∩_∩)O~
- astolia
- 论坛版主
- 帖子: 6445
- 注册时间: 2008-09-18 13:11
Re: 请教shell脚本:判断系统版本,启动不同应用
- astolia
- 论坛版主
- 帖子: 6445
- 注册时间: 2008-09-18 13:11
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 请教shell脚本:判断系统版本,启动不同应用
当然不是不用不行。我只是习惯写更好的代码,即使它在某些个例中并不是更好。
[[ 是关键字,[ 是普通命令。解析上有区别(具体不太记得了)。另外 [[ 里可以用 && ||。