如何自定义shell脚本 linux中别名alilas和函数function的使用

本文介绍了如何在PATH目录下编写可执行脚本,使用alias创建快捷命令,以及利用function实现灵活参数传递。通过实例演示了如何简化工作流程,适合IT人员提升编程和操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在工作和学习中,我们通常需要自己编写一些或简单或复杂的脚本,帮助我们更加快捷地去完成一些繁琐的工作,这里提供三个常用的自定义脚本的方式。


一、在PATH目录底下编写脚本

1.1 查看PATH变量

$ echo $PATH
/opt/Bigdata/client/ClickHouse/clickhouse/bin:...:/opt/Bigdata/client/ZooKeeper/zookeeper/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# 使用sed进行优化展示
$ echo $PATH | sed 's/:/\n/g'
/opt/Bigdata/client/ClickHouse/clickhouse/bin
...
/opt/Bigdata/client/ZooKeeper/zookeeper/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin

1.2 在PATH路径中创建文件,编写脚本内容并赋予可执行权限

为避免与系统或其他软件命令命名冲突,建议自定义的脚本以.sh结尾

$ touch mybeeline.sh
$ vim mybeelibne.sh
#!/bin/bash
beeline --hiveconf hive.mapred.supports.subdirectories=true \
--hiveconf mapreduce.input.fileinputformat.input.dir.recursive=true \
--hiveconf hive.resultset.use.unique.column.names=false \
--hiveconf hive.compute.query.using.stats=false \
"$@"
$ chmod +x mybeeline.sh

1.3 执行 source /etc/profile 后便可直接使用了


二、使用alias

2.1 查看系统已定义的别名alias

$ alias
alias cp='cp -i'
...
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

是不是发现自己无意中已经使用过其中的部分别名了,是不是特别的方便,很多快捷命令就是用alias机制实现的。

2.2 自定义alias

①临时alias:直接在命令行执行别名生成命令即可,方便但只在当前session生效

# 自定义一个格式化系统时间的alias
$ alias mydate='date +"%F %T"'
# 使用
$ mydate
2022-05-17 17:30:49
# 撤销临时alias
$ unalias mydate

②永久alias:在当前session和其他终端均可使用

# 在/etc/profile 添加刚才的命令
$ vim /etc/profile
alias mydate='date +"%F %T"'
# source此profile文件后便可直接使用
$ source /etc/profile
# 执行`alias`命令可看到此别名
# 如需删除,需从profile文件中删除alias构建语句并重新source

三、使用function

同alias,可构建临时或者永久的,方法也是修改/etc/profile文件。此处仅演示如何构建临时function
示例:
使用oozie的时候,大多数命令都需要添加 “-oozie oozie-url”,非常的繁琐。使用章节一中编写脚本的方法肯定是可以解决的,这里提供一个使用function解决的新思路。

3.1 declare的使用

# 直接输入declare,我们可以看到很多系统变量,此处不多做介绍
# 我们定义的function也需要通过此命令进行查看
$ declare
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-Huawei-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
BIGDATA_CLIENT_HOME=/opt/Bigdata/client
BIGDATA_DATA_HOME=/srv/BigData
...

3.2 定义临时function

和alias定义的另一个区别是需以function开头,构建临时function时可省略,但是编写profile文件构建永久函数时必须添加

function myoozie ()
{
    export OOZIE_URL="https://$(hostname -f):21003/oozie";
    OOIZE_HOME=/opt/Bigdata/install/FusionInsight-Oozie-5.1.0/oozie-5.1.0;
    case $1 in
        job)
            shift;
            ${OOIZE_HOME}/bin/oozie job -oozie $OOZIE_URL $@
        ;;
        jobs)
            shift;
            ${OOIZE_HOME}/bin/oozie jobs -oozie $OOZIE_URL $@
        ;;
        *)
            $OOIZE_HOME/bin/oozie $@
        ;;
    esac
}
# 最后的*) 可兼容第1个参数不是job后jobs的情形,比如myoozie help job,是可以正常使用的

alias和function这两种不同构建方法的差异在于:前者只能传递参数至命令最后,后者可以是任意位置。

3.3 使用

# 查看最新的10个任务,使用当前时区
$ myoozie jobs -len 10 -localtime 2>/dev/null
INFO CMD=jobs -oozie https://node-master2kmdc.mrs-lcnd.com:21003/oozie -len 10 -localtime
Job ID                                   App Name     Status    User      Group     Started                 Ended
------------------------------------------------------------------------------------------------------------------------------------
0000008-220418111012982-oozie-omm-W      oozie-web    SUCCEEDED dmp_operator1-         2022-04-19 14:37 CST    2022-04-19 14:37 CST
...

# 显示帮助
$ oozie help job
INFO CMD=help job
usage:
      the env variable 'OOZIE_URL' is used as default value for the '-oozie' option
      the env variable 'OOZIE_TIMEZONE' is used as default value for the '-timezone' option
      the env variable 'OOZIE_AUTH' is used as default value for the '-auth' option
      custom headers for Oozie web services can be specified using '-Dheader:NAME=VALUE'

      oozie job <OPTIONS> : job operations
                -action <arg>          coordinator rerun/kill on action ids (requires -rerun/-kill);
                                       coordinator log retrieval on action ids(requires -log)
                -allruns               Get workflow jobs corresponding to a coordinator action
                                       including all the reruns
...

总结

这些都是在工作和学习中慢慢发现的,然后查阅相关资料加深了部分理解,尚属小白,如有错误还望各位大佬不吝指正,大家一起进步~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值