`

Shell程序中引入可配置文件

阅读更多
#!/usr/bin/env bash

set -x

export ORIGDIR=`dirname $0`
export ABSDIR=`cd ${ORIGDIR} && pwd`
export COLUMNS=300
ct=/usr/atria/bin/cleartool
sed=/bin/sed
awk=/bin/awk
diff=/usr/bin/diff

if [ $# -ne 2 ]; then
    echo """
Usage:
	./firmware.sh r4.0.firmware validate|init|unpack|install|all
"""
    exit 1
fi
source ${ORIGDIR}/firmware.conf

if [ -e "$1" ]; then
    source $1
	export FIRMWARE_RELEASE
else
    echo "Firmware file $1 not found."
    exit 1
fi

#check if the software from website is uploaded to specified folder
firmware_validate_upload(){
	if [ ! -e "${FIRMWARE_UPLOADDIR}" ]; then
		echo "firmware upload dir ${FIRMWARE_UPLOADDIR} not exist, will create it automatically"
		mkdir -p ${FIRMWARE_UPLOADDIR}
	fi
	if [ ! -e "${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}" ]; then
		echo "firmware upload dir ${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE} not exist, will create it automatically"
		mkdir -p ${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}
	fi
	firmware_updir=${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}
	#check Wi4_RFH_pkg.bin
	if [ ! -e "${firmware_updir}/Wi4_RFH_pkg.bin" ]; then
		echo "${firmware_updir}/Wi4_RFH_pkg.bin not exists!"
		exit 1
	fi
	#check 2x installation package
	if [ ! -e "${firmware_updir}/2x/physap_${FIRMWARE_PKG_PATTERN}_pkg.zip" ]; then
		echo "${firmware_updir}/2x/physap_${FIRMWARE_PKG_PATTERN}_pkg.zip not exists!"
		exit 1
	fi
	if [ ! -e "${firmware_updir}/2x/Wi4_2s_DSP_pkg.bin" ]; then
		echo "${firmware_updir}/2x/Wi4_2s_DSP_pkg.bin not exists!"
		exit 1
	fi
	if [ ! -e "${firmware_updir}/2x/Wi4_2s_MFPGA_pkg.bin" ]; then
		echo "${firmware_updir}/2x/Wi4_2s_MFPGA_pkg.bin not exists!"
		exit 1
	fi
	#check 4x installation package
	if [ ! -e "${firmware_updir}/4x/physap4x_${FIRMWARE_PKG_PATTERN}_pkg.zip" ]; then
		echo "${firmware_updir}/4x/physap4x_${FIRMWARE_PKG_PATTERN}_pkg.zip not exists!"
		exit 1
	fi
	if [ ! -e "${firmware_updir}/4x/Wi4_4s_DSP_pkg.bin" ]; then
		echo "${firmware_updir}/4x/Wi4_4s_DSP_pkg.bin not exists!"
		exit 1
	fi
	if [ ! -e "${firmware_updir}/4x/Wi4_4s_MFPGA_pkg.bin" ]; then
		echo "${firmware_updir}/4x/Wi4_4s_MFPGA_pkg.bin not exists!"
		exit 1
	fi
	echo "Firmware release ${FIRMWARE_RELEASE} is uploaded under ${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}"
	echo "Firmware release ${FIRMWARE_RELEASE} is a valid upload"
}

#initialize the firmware work dir and log dir
firmware_init(){
        echo "initialize firmware installation"
        if [ ! -e "${FIRMWARE_WORKDIR}" ]; then
			echo "firmware upload dir ${FIRMWARE_WORKDIR} not exist, will create it automatically"
            mkdir -p ${FIRMWARE_WORKDIR}
        fi
        if [ -e "${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}" ]; then
			echo "Firmware release already installed, please check again!"
			exit 1
        fi

        echo "initialize firmware work dir"
        cd ${FIRMWARE_WORKDIR}
        mkdir "FIRMWARE_${FIRMWARE_RELEASE}"
        chmod 777 "FIRMWARE_${FIRMWARE_RELEASE}"

        #initialize 2x
        cd ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}
        mkdir 2x
        chmod 777 2x
        cd 2x
        mkdir phy_sap_api
        cd phy_sap_api
        mkdir lib
        mkdir include
        #initialize 4x
        cd ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}
        mkdir 4x
        chmod 777 4x
        cd 4x
        mkdir phy_sap_api
        cd phy_sap_api
        mkdir lib
        mkdir include
        mkdir config

        #initialize log dir
		echo "initialize firmware log dir"
		if [ ! -e "${FIRMWARE_LOGDIR}/FIRMWARE_${FIRMWARE_RELEASE}" ]; then
			echo "Firmware log dir not exist, will create it automatically"
			mkdir -p ${FIRMWARE_LOGDIR}/FIRMWARE_${FIRMWARE_RELEASE}
			chmod 777 ${FIRMWARE_LOGDIR}/FIRMWARE_${FIRMWARE_RELEASE}
        fi
		
        echo "firmware working dir is initialized."
}

#unpack the software
firmware_unpack(){
        echo "unpack firmware..."
		
		if [ ! -e "${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}/2x/phy_sap_api" ]; then
			echo "Please invoke firmeate init method at first"
			exit 1
		fi 
		
		#copy package to working dir
		echo "copy package to working dir ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}"
		cp ${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}/Wi4_RFH_pkg.bin ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}/2x/phy_sap_api
		cp ${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}/2x/* ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}/2x/phy_sap_api
		cp ${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}/Wi4_RFH_pkg.bin ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}/4x/phy_sap_api
		cp ${FIRMWARE_UPLOADDIR}/FIRMWARE_${FIRMWARE_RELEASE}/4x/* ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}/4x/phy_sap_api
		
        #unpack 2x
        cd ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}/2x/phy_sap_api
        if [ ! -e "physap_${FIRMWARE_PKG_PATTERN}_pkg.zip" ]; then
                echo "Firmware package has not been uploaded, please upload it before go ahead."
                exit 1
        fi
        #ls -ltr
        unzip physap_${FIRMWARE_PKG_PATTERN}_pkg.zip
        #ls -ltr
        rm physap_${FIRMWARE_PKG_PATTERN}_pkg.zip
        rm physap_lib.a
        mv physap.out lib/
        #ls -ltr lib/
        mv physap_inc.zip include/
        #ls -ltr
        cd include/
        unzip physap_inc.zip
        rm physap_inc.zip
        #ls -ltr

        #unpack 4x
        cd ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}/4x/phy_sap_api
		if [ ! -e "physap4x_${FIRMWARE_PKG_PATTERN}_pkg.zip" ]; then
			echo "Firmware package has not been uploaded, please upload it before go ahead."
			exit 1
        fi
        #ls -ltr
        unzip physap4x_${FIRMWARE_PKG_PATTERN}_pkg.zip
        rm physap4x_${FIRMWARE_PKG_PATTERN}_pkg.zip
        mv physap4s.out lib/
        #ls -ltr lib/
        mv physap4s.cfg config/
        #ls -ltr config/
        mv physap4x_inc.zip include/
        #ls -ltr
        cd include/
        unzip physap4x_inc.zip
        rm physap4x_inc.zip
        #ls -ltr
        echo "unpacked firmware to ${FIRMWARE_WORKDIR}/FIRMWARE_${FIRMWARE_RELEASE}"
}

import_modem(){
	modem=$1
	if [ ! -e "${FIRMWARE_LOGDIR}/FIRMWARE_${FIRMWARE_RELEASE}" ]; then
		echo "Firmware log dir not exist, will create it automatically"
		mkdir -p ${FIRMWARE_LOGDIR}/FIRMWARE_${FIRMWARE_RELEASE}
		chmod 777 ${FIRMWARE_LOGDIR}/FIRMWARE_${FIRMWARE_RELEASE}
	fi
	log=${FIRMWARE_LOGDIR}/FIRMWARE_${FIRMWARE_RELEASE}/${modem}.log
	touch ${log}
	nohup time ${ct} setview -exec "${ABSDIR}/firmware_import.sh ${modem}" ${FIRMWARE_VIEW} > ${log} 2>&1
	if [ $? == 1 ]; then
		cat ${log}
		echo "modem ${modem} failed to be imported, please check log ${log}"
		exit 1
	fi
	echo "modem ${modem} is imported, please check log ${log}"
}

#install the firmware, should running with apbld
firmware_import(){
	echo "install firmware..."
	import_modem '2x'
	import_modem '4x'
	echo "installed firmware..."
}

case "${2}" in
	validate)
		firmware_validate_upload
		;;
	init)
		firmware_init
		;;
	unpack)
		firmware_unpack
		;;
	import)
		firmware_import
		;;
	all)
		firmware_validate_upload
		firmware_init
		firmware_unpack
		firmware_import
		;;
	*)
		echo "Please specify validate,init,unpack,install or all as the second arg"
		exit 1
		;;
esac

exit 0

分享到:
评论

相关推荐

    操作系统shell命令

    3. **Korn Shell (ksh)**:这是一种在UNIX系统中广泛使用的Shell,它结合了Bourne Shell和C Shell的最佳特性,特别是引入了一些现代化的Shell技术,比如命令行编辑功能。 4. **Bourne Shell (sh)**:这是最初的...

    shell.dat生成器

    在IT行业中,`shell.dat` 文件通常与命令行接口(CLI)或外壳程序有关,特别是Linux和Unix系统中的Bash Shell。`shell.dat` 文件可能包含脚本、命令历史记录或者与Shell相关的配置信息。然而,"shell.dat生成器" 指...

    ssh整合的一些配置文件

    - `struts-plugin.xml`: 插件配置文件,用于引入和配置Struts2的扩展,例如Spring插件,可以实现Action与Spring bean的无缝集成。 - `struts.xml`: 应用程序级别的配置文件,定义Action类、结果映射、包配置等。 ...

    Go2Shell-3.0.2.zip

    在"Go2Shell-3.0.2.zip"压缩包中,包含的主要文件很可能是Go2Shell的应用程序文件和可能的配置或文档。通常,这种类型的软件包会有一个可执行文件,用于安装或运行该应用程序。此外,可能还会有README文件,其中包含...

    计算机软件基础:06第一章UNIX_Cshell

    Unix系统中,shell程序的解释器由程序文件的第一行(shebang)指定,例如`#!/bin/csh`表示该文件应由C Shell解释。如果缺少shebang或以注释开头,系统默认使用B Shell。 **目录/文件名的自动补齐**: C Shell提供了...

    java远程调shell

    至于压缩包中的"java连接shell"文件,可能包含了示例代码、配置文件或者测试脚本,这些资源可以帮助开发者更好地理解和实践Java远程调用Shell的过程。通过学习和研究这些文件,可以加深对这个主题的理解,并能够将...

    cshell 文档

    Cshell,因其与C编程语言相似的结构和符号而得名,是Unix系统及类Unix操作系统(如Linux)中的一种交互式外壳程序(shell)。它由贝尔实验室的Bill Joy在1982年为BSD Unix开发,旨在提供一种更强大的命令解释器。C...

    windows命令大全+shell命令大全

    - 用户可以通过在Path中添加自定义的目录来引入自己编写的Shell程序或脚本。 - 默认的Shell命令大多数位于`C:\Windows`和`C:\Windows\System32`目录下。 - **Shell命令的执行方式**: - 通过打开CMD控制台并输入...

    configuration-files:多个程序的各种配置文件

    配置文件的最佳实践**:为了保持配置文件的整洁,可以将复杂或重复的配置片段放入单独的文件,然后在主配置文件中通过`source`引入。此外,使用版本控制系统(如Git)来管理配置文件,可以方便地追踪和回滚更改。 ...

    shell脚本可配置多线程备份mysql5.7.8以后数据库异常sendEmail25发邮件.rar

    在IT行业中,shell脚本是Linux/Unix系统中常用的一种自动化任务执行工具,它利用bash或其他shell解释器来编写程序,实现对系统的管理和自动化操作。本压缩包中的资源主要是关于如何利用shell脚本来配置多线程备份...

    shell format

    这些配置可以通过编写配置文件或直接在命令行中指定。 9. **集成开发环境(IDE)支持**:许多IDE和文本编辑器(如Vim、Emacs、VS Code等)都有插件支持shfmt,可以直接在编辑器内部进行格式化和校验,提升开发效率...

    shell脚本可配置多线程备份mysql5.7.8以后数据库异常mail465发邮件.rar

    在给定的压缩包文件中,"shell脚本可配置多线程备份mysql5.7.8以后数据库异常mail465发邮件"是一个特别实用的脚本,它结合了多个关键功能,包括数据库备份、多线程处理以及错误通知。 首先,我们来讨论MySQL数据库...

    asp.net core中灵活的配置方式详解

    除了监听地址,你还可以在配置文件中设置数据库连接字符串、日志级别等。 **环境特定配置** 在软件开发过程中,通常会有多种环境,如开发、测试和生产。每种环境都需要不同的配置设置,例如不同的数据库连接字符串...

    linux主要shell命令详解

    - **grep**:在文件中搜索特定的模式。 - **find**:查找文件或目录。 - **chmod**:更改文件或目录的权限。 - **chown**:更改文件或目录的所有者。 - **tar**:打包和压缩文件。 - **gzip**:压缩文件。 - **unzip...

    gnome shell

    开发人员或高级用户可以下载这个文件,编译并安装到自己的Linux系统中,以获取最新的开发版本或者根据需要自定义配置。`Readme-说明.htm`文件通常是项目提供的文档,可能包含了编译、安装和使用GNOME Shell的说明,...

    Ebook - Linux-Unix-Shells, Bourne-Shell, Korn-Shell, C-Shell, Bash, Tcsh.pdf

    Korn Shell被广泛用于商业环境中,尤其是在需要高度可配置性的场景下。 ### 四、C Shell (csh) C Shell由Bill Joy在1980年代初期为BSD Unix系统开发。它的设计灵感来自于C语言,因此在语法上与C语言相似,使得...

    shell编程.ppt

    init程序根据/etc/inittab文件配置终端,并调用getty显示登录界面。用户成功登录后,login进程会启动用户的Shell,通常是/home目录下的.bashrc或.bash_profile文件定义的Shell。 4. **各种Shell的特性** - **...

    ipa批量打包shell脚本

    此外,还需要一个有效的签名配置文件(Provisioning Profile)和证书,这些用于对应用进行签名,使其能在iOS设备上运行。 接下来,我们需要编写shell脚本。脚本的基本结构会包括以下部分: 1. **设置变量**:定义...

    升级到Ubuntu 12 10无法进入原来的Gnome3 Gnome Shell 图形界面

    6. **重置Gnome Shell设置**:如果是因为配置文件出现问题,可以删除`.gconf`和`.gnome*`目录,重启系统以重置Gnome Shell设置。 7. **社区支持**:如果问题依然存在,可以寻求Ubuntu和Gnome社区的帮助,他们通常有...

    Windows+Shell扩展编程完全指南(配套代码).rar

    - **注册表配置**:注册表中的键值设置决定了Shell扩展的安装和运行。如`HKEY_CLASSES_ROOT`下的相关键值。 - **IDispatch接口**:用于实现与用户的交互,例如,处理上下文菜单命令。 - **IContextMenu接口**:...

Global site tag (gtag.js) - Google Analytics