Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Shell-alias在Shell脚本中的使用

Shell-alias在Shell脚本中的使用

作者头像
小小工匠
发布于 2021-08-16 08:29:30
发布于 2021-08-16 08:29:30
2.5K00
代码可运行
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构
运行总次数:0
代码可运行

概述

众所周知,shell脚本使用的是非交互式方式,在非交互式模式下alias扩展功能默认是关闭的,此时虽然可以定义alias别名,但是shell不会将alias别名扩展成对应的命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH中均没有与alias别名同名的命令,则shell会找不到指定的命令。


在shell中开启alias

使用shell内置命令shopt命令来开启alias扩展选项。shopt是shell的内置命令,可以控制shell功能选项的开启和关闭,从而控制shell的行为

常用命令:

Command

Desc

shopt -s opt_name

Enable (set) opt_name.

shopt -u opt_name

Disable (unset) opt_name.

shopt opt_name

Show current status of opt_name.


比如

查看同义词是否开启(交互模式下)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[/xgj/gj]$shopt expand_aliases
expand_aliases  on

shopt expand_aliases在交互式模式下 默认是打开的,在非交互式模式下是关闭的,但可以用可shopt来将其开启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shopt -s expand_aliases

实际操作

在我们的项目中某个模块的双机启动脚本(root用户下操作),其中应用的启停使用了alias建立的同义词来操作,如果想要在脚本中使用,必须开启同义词才。

项目启动中会依赖一些环境变量,所以双机启动脚本中需要显式的引入.bash_profile文件。

所以我们将 开启alias的命令放在 .bash_profile中。

source .bash_profile 生效。

脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
##############################################
## Name: drm_script.ps
## Desc: Duplex switch script of DRM 
## Param: None
## Author: Mr Yang
## Date: 2017-07-25
## Version:V1.0
## Comment: /drm/.bash_profile must set "shopt -s  expand_aliases" so that the alias in the script works well
##############################################

#atcive the environment variable
source /drm/.bash_profile

#main menu of tomcat and jobserver
tomcat_jobserver_menu=/drm/drm

#main menu of uip and bp1
uip_bp1_menu=/drm/zsmart-uip-8.1.0/bin

#stauts of tomcat(webserver)  pgrep -f "\-Dz_app=cvbs" 
status_tomcat=$(pgrep -f Dz_app=cvbs | wc -l)

#status of jobserver
status_jobserver=$(pgrep -f Dz_app=jobserver | wc -l)

#status of uip
status_uip=$(pgrep -f Dz_app=uip | wc -l)

#status of bp1
status_bp1=$(pgrep -f Dz_app=bp1 | wc -l)

#pid of tomcat
pid_tomcat=$(pgrep -f Dz_app=cvbs)

#pid of jobserver
pid_jobserver=$(pgrep -f Dz_app=jobserver)

#pid of uip
pid_uip=$(pgrep -f Dz_app=uip)

#pid of bp1
pid_bp1=$(pgrep -f Dz_app=bp1)


#########################################
#
#start all processes including tomcat/jobserver/uip/bp1 
#start tomcat/jobserver with drmtool 
#start uip/bp1 with uip.sh
#
#########################################
startProcess(){

        echo "stop first"
        #there are some problems if you execute startProcess twice or more times,so stop process first 
        stopProcess


        #start jobserver and tomcat
        echo "begin to start [tomcat,jobserver]"
        su - drm -c "cd $tomcat_jobserver_menu; jobstart ; start; exit" > /dev/null 2>&1

        echo "sleep 5 seconds..."
        sleep 5

        echo "begin to start [uip,bp1]"
        #start uip and bp1
        su - drm -c "cd $uip_bp1_menu; startuip; startbp1; exit" > /dev/null 2>&1
}

#########################################
#
#stop all processes including tomcat/jobserver/uip/bp1 
#stop tomcat/jobserver with drmtool
#stop uip/bp1 with uip.sh
#
#########################################
stopProcess(){
        #stop tomcat、jobserver
        echo "begin to stop process[tomcat,jobserver]"
        su - drm -c "cd $tomcat_jobserver_menu ; stop ; jobstop ;  exit" > /dev/null 2>&1
        echo "process[tomcat,jobserver] stopped sucessfully ,sleep 3 seconds"
        sleep 3

        #stop uip、bp1
        echo "begin to stop process[uip,bp1]"
        su - drm -c "cd $uip_bp1_menu && stopbp1 && stopuip && exit" > /dev/null 2>&1
        echo process[uip,bp1] stopped sucessfully
}


#########################################
#
#print the status of each process
#
#########################################
status(){
        #status of tomcat
        check_status $status_tomcat  tomcat
        #status of jobserver
        check_status $status_jobserver jobserver 
        #status of uip
        check_status $status_uip uip
        #status of bp1
        check_status $status_bp1 bp1       
}
#########################################
#
#public function
#checking status of each process
#
#########################################
check_status(){
    if [ $1 -eq 1 ] ; then 
            echo "$2 is working..."
    elif [ $1 -gt 1 ] ;then 
            echo -e " \033[31m more than one  $2  process has been start,  make sure only one process exists \033[0m " 
    else 
            echo -e " \033[31m $2 stopped  \033[0m " 
    fi
}

#########################################
#
#stop all processes by force
#find the pid ,and kill the pid
#
#########################################
forcedstop(){
        #kill tomcat
    kill_process $pid_tomcat cvbs 
    #kill jobserver
    kill_process $pid_jobserver jobserver
    #kill uip
    kill_process $pid_uip  uip
    #kill bp1
    kill_process $pid_bp1  bp1
}

#########################################
#
#public function
#kill each process
#
#########################################
kill_process(){
    #check the length of $1 [zero:false, non-zero:true] 
    #two parameters [$1->pid, $2->processName],if $1 is null ,$2 will replace $1 ,$2 turns to $1, so make sure $1 is number
    if [[ -n $1 && $1 -gt 0 ]] ; then 
        echo "pid: $1 , process: $2"
        kill -9 $1 
            if [ $? == 0 ] ; then 
                echo "pid: $1 , process: $2 has been stopped successfully"
                sleep 1
            fi
        else 
            echo -e " \033[31mpgrep -f Dz_app=$1 without result, $1 has been stopped  \033[0m " 
    fi
}

#########################################
#
# $1 variable 
# $1 can only with (start/stop/status/restart/forcedstop)
#
#########################################
case "$1" in
   'start')
        startProcess
        ;;
   'stop')
        stopProcess
        ;;
   'status')
        status
        ;;
   'restart')
        #stopProcess
        #sleep 3
        startProcess
        ;;
    'forcedstop')
        forcedstop
        ;;
   *)
        echo -e "\033[31m Usage: $0 { start | stop | restart | forcedstop | status} \033[0m"
        exit 1
esac

exit 0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/07/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux 服务器上如何通过 Shell 脚本一键部署 SpringBoot 应用
springboot 是默认集成Tomcat容器的,将项目打包成jar包库、使用Java直接启动jar包(非spring boot也可以)
IT小马哥
2020/03/18
2K0
101个shell脚本
emm。。这个脚本是因为tomcat没有自带的能够给service开机启动的脚本,我就琢磨着自己写了一个简单的启动脚本,如下:
端碗吹水
2020/09/23
1.4K0
101个shell脚本
推荐:Linux启动Java程序jar包Shell脚本
每次启动Java程序jar包的时候,难道你还在手敲java -jar xxserver.jar……?边敲边想着都需要追加哪些参数?
IT大咖说
2021/01/27
7.4K0
推荐:Linux启动Java程序jar包Shell脚本
按日切割SpringBoot项目日志插件及shell脚本
好久好久没更新文章了,感觉自己都比较懒散了。。。事也多,也不知道想给大家分享什么。
猿码优创
2019/11/28
5840
按日切割SpringBoot项目日志插件及shell脚本
linux怎么编写shell脚本_简单的shell脚本代码
用spring boot框架做的项目,将第三方包全部打在jar里面,通过shell脚本启动和停止服务,常用的shell脚本模板如下: #!/bin/bashJAVA_OPTIONS_INITIAL=-Xms128MJAVA_OPTIONS_MAX=-Xmx512M_JAR_KEYWORDS=monitor-alarm-task-1.0-SNAPSHOT.jarAPP_NAME=monitor-alarm-taskAPPLICATION_FILE=/opt/scpip_monitor/applicati
全栈程序员站长
2022/11/09
4.2K0
Dubbo服务治理篇——使用Shell脚本维护Dubbo服务
目的:便于管理,避免应用迁移时的命名冲突。 我定义的目录结构如下(linux)下:
冰河
2020/10/29
5500
嵌入式linux应用开发之常用shell脚本总结
linux的shell脚本很强大,可以用来做一些特殊功能。shell脚本语法虽然很简单,但是有时候把经常忘,还得再写一遍且验证ok才能用,这里总结下留作备忘。
杨永贞
2022/01/07
1.7K0
嵌入式linux应用开发之常用shell脚本总结
分享一个日常使用的一段shell脚本
日常开发经常要简化很多操作可以用make 工具封装很多命令干活,但是在docker 容器内有时候为了简化镜像的大小和避免风险都没有安装make ,但是又需要用很多已命令的命令执行任务,索性就用shell封装好一个类似make 的模板,如下所示 #!/usr/bin/env bash #/ PATH=./node_modules/.bin:$PATH #/ https://www.tldp.org/LDP/abs/html/options.html # Similar to -v (Print each co
IT大咖说
2022/08/26
3040
分享一个日常使用的一段shell脚本
服务器制作一键启动、重启、状态监控脚本 来自ruoyi
特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!
收心
2022/01/19
1.2K0
Shell脚本编程_shell简单脚本
  shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,在用户和内核之间充当翻译官的角色,是一个命令解释器。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 shell。
全栈程序员站长
2022/11/09
8.1K0
Shell脚本编程_shell简单脚本
Linux登录shell和非登录(交互式shell)环境变量配置
使用Jenkins执行shell脚本的时候, 碰到command not found. 比如java mvn, 这些环境变量配置在/etc/profile 中, 但jenkins执行的时候并没有加载.
Ryan-Miao
2020/05/19
2.8K0
linux中jar启动脚本
# java env export JAVA_HOME=/opt/jdk1.8.0_11 # App Info # 应用存放地址 APP_HOME=/cjbdi/hubeiDataAnalysisBackend # 应用名称 APP_NAME=$1 TIME=$(date +%Y-%m-%d) # Shell Info # 使用说明,用来提示输入参数 usage() { # echo "Usage: sh boot [APP_NAME] [start|stop|restart|statu
高大北
2022/06/16
2.6K0
shell 学习笔记(17)
声明:转载需署名出处,严禁用于商业用途! 1601.关于rsync相同文件后 du 大小不一样的问题: 不一样大小很正常,因为文件系统的block不一样,或者文件系统底层用了压缩什么的。 因为du是块大小,ls是文件的实际大小,系统的块大小一般为4KB, 所以du的文件一般比ls的结果要大,而且系统块大小可以更改。 1602.查看系统块大小: tune2fs -l /dev/sda1 | grep Block 1603.vi -u NONE -N 打开超大文件:
用户1177713
2018/02/24
1.1K0
Shell脚本攻略02-玩转变量与环境变量
有一些特殊的变量会被shell环境和操作系统环境用来存储一些特别的值,这类变量就被称为环境变量。
小小工匠
2021/08/16
9750
shell脚本中的case条件语句介绍和使用案例
#前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句。case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,case看起来更规范和易读
老油条IT记
2020/04/08
6.4K0
shell脚本中的case条件语句介绍和使用案例
shell脚本运行jar包获取参数_linux加载一个目录下的所有jar包
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.9K0
Shell脚本常用命令一览
描述:bash 是一个为GNU计划编写的Unix shell,它的名字是一系列缩写Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / Born again), Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。
全栈工程师修炼指南
2022/09/28
1.3K0
Shell脚本常用命令一览
Linux运维常用shell脚本之应用管理实例
     通过apache访问日志access.log 统计IP和每个地址访问的次数,按访问量列出前10名。      日志格式样例如下:      192.168.1.247  ---【02/jul/2010:23:44:59 + 8080 】 "GET /HTTP/1/1"   200 19      答案:          cat  access.log | awk '{print  $1}' |sort| uniq -c |sort -rn |head -10  (uniq 参数说明:– c 显示输出中,在每行行首加上本行在文件中连续出现的次数。      sort参数说明:sort默认的排序方式是升序,-r 参数就会改变成倒叙;你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。)
菲宇
2022/12/02
9080
常用的shell脚本
天天浏览博客的好处就是可以学习新知识,且可以温习旧知识。 以下内容摘自公众号----一口Linux,在此记录一下。
cultureSun
2023/05/18
4730
learn shell
the basic shell skills. Bourne shell sh ksh Bash psh zsh C shell csh tcsh [root@bogon temp]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh 1.echo [root@bogon temp]# echo "hello world!" -b
Ryan-Miao
2018/03/13
6720
相关推荐
Linux 服务器上如何通过 Shell 脚本一键部署 SpringBoot 应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验