使用shell封装Linux命令实现自定义Linux命令

news2025/3/1 11:49:13

前言

在日常工作中,尤其是在Linux上做开发的同学或者运维的同学们肯定会遇到过如下场景,比如在Linxu下通过find查找一个文件并且想看这个文件的详细信息,如果直接使用命令可能会一时想不起来,或者想起来了但是有个别参数忘记了。或者一些很频繁的操作,但是需要脚本来完成。于是一个目录下出现了很多脚本,真正用的时候又忘记了哪个脚本是干什么的。导致工作效率低下。

解决方法

我的思路是将一些常用的但是又不好记的命令统一写成一个脚本,然后重新去命名这个命令,比如上面提到的使用find查看一个文件的详细信息。
Linux原生命令:find /home ‘test.xml’ -exec ls -lh {}
使用shell封装后的函数:

find_info() {

  file_name=$1
  current_path=`pwd`
  find $current_path -name $file_name -exec ls -lh {} ;
}

将该函数保存为find_info.sh,之后运行 sh find_info.sh ‘test.xml’ 即可从当前位置发起搜索。

再比如使用awk分割某个字符,如果使用原生命令如下:
例如:分割日志文件中的数据库查询耗时时间,
awk -F “TOTALTIME” ‘{print $2}’
使用shell封装后的函数:

split() {
  str=$1
  split_symbol=$2
  num=$3
  echo `echo $str | awk -v a=${num} -F $split_symbol '{print $a}'`
}

将函数保存为split.sh, 运行sh split.sh ‘log文件中的一段话’ ‘TOTALTIME’ 2 这样就可以达到和上面一样的效果。

当然了,这样保存为一个一个的脚本使用起来其实并没有简化操作,那么如果将多个函数封装到一个shell脚本之后,那么使用起来会不会方便一些呢,我们来尝试一下。

创建jef.sh 然后修改权限为777,也就是最大的可读可写可执行权限。

#!/usr/bin/env bash

#########################################
# Describe: 封装常用函数
# Version: v1.0
# Author: cz
#########################################

# 分割
split() {
  str=$1
  split_symbol=$2
  num=$3
  echo `echo $str | awk -v a=${num} -F $split_symbol '{print $a}'`
}

# 查找
find_info() {

  file_name=$1
  current_path=`pwd`
  find $current_path -name $file_name -exec ls -lh {} ;
}

command_array=("split" "findinfo")
if [ $# -lt 1 ]; then
    echo "请明确指令:"
    length=${#command_array[@]}
    for ((i=0;i<$length; i++));
        do
        echo ${command_array[$i]}
        done
    exit
else

  if [[ $1 == "split" || $1 == "-split" ||$1 == "SPLIT" ]]
   then
     split $2 $3 $4
   elif [[ $1 == 'findinfo' || $1 == '-findinfo' || $1 == "FINDINFO" ]]
     then
       find_info $2
  elif [[ $1 == "help" || $1 == "-help" || $1 == "HELP" ]]
   then
     echo "split: 将指定内容按照指定分隔符分割并且获取指定下标的内容 第一个参数为内容,第二个为分隔符 for example: jef split 'q|w|e|r|t' '|' 2"
     echo "findinfo: find并展示详细信息 jef findinfo 'test.txt'"
  fi
fi

这样一个常用命令函数就封装好了,在使用的时候只需要sh jef.sh findinfo 'test.xml’或者sh jef.sh splic xxx ‘xx’ 1即可。代码中还做了一些装饰。用于一些友善的提示

但是这样虽然相对好用一些了,但是看着还是怪怪的,不太高大上。
那么咱们继续封装

将jef.sh 配置到环境变量中,增加一个快捷方式如下:
vi .cshrc
alias jef ‘sh /home/acctuser/cz/test/jef’

这样在使用的时候就和普通的Linux命令一样了.如下:
在不添加任何其他指令时,会友善的提示:

image.png

在不知道怎么使用时,执行jef -help 或者jef help:

image.png

执行具体的命令时

image.png

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第15天,点击查看活动详情

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC02注解与Rest风格

SpringMVC02 SpringMVC的注解 一、RequestParam 1、RequestParam注解介绍 位置&#xff1a;在方法入参位置作用&#xff1a;指定参数名称&#xff0c;将该请求参数 绑定到注解参数的位置属性 name&#xff1a;指定要绑定的请求参数名称&#xff1b; name属性和value属性互为…

vue-quill-editor富文本编辑框使用

vue富文本中实现上传图片及修改图片大小等功能。 1&#xff0c;配置使用 配置使用网上很多&#xff0c;记录下自己的使用过程 第一步&#xff1a;components/Editor文件夹下创建QuillEditor.vue文件 <template><div :class"prefixCls"><quill-edito…

bitset的用法

bitset的用法 bitset介绍 C的 bitset 在 bitset 头文件中&#xff0c;它是一种类似数组的结构&#xff0c;它的每一个元素只能是&#xff10;或&#xff11;&#xff0c;每个元素仅用&#xff11;bit空间&#xff0c;相当于一个char元素所占空间的八分之一。 bitset中的每个…

MyBatis-Plus Generator v3.5.1 最新代码自动生成器

一、概述 官网&#xff1a;https://baomidou.com/ 官方文档 &#xff1a;https://baomidou.com/pages/56bac0/ 官方源码地址&#xff1a; https://gitee.com/baomidou/mybatis-plus 官方原话&#xff1a; AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 Auto…

【TMT数据传不到MES中间库】-F18

MES中间库有张表:T_Z_ERPSCInfo TMT机台落纱后,会把落纱的数据传到T_Z_ERPSCInfo去。 目前总是有几个机台(以F18举例),落纱了,数据没有过来。 起初以为是没有访问权限的问题,在机台上telnet ip+端口,发现没问题。 后来认为是数据库的账号有问题。 download了一份日…

Oracle EBS数据定义移植工具:FNDLOAD

在实际的EBS二次开发中&#xff0c;我们经常会碰到需要在各个环境之间移植二次开发的程序对象以及数据定义&#xff0c;如在EBS二次开发中并发请求的定义会涉及到&#xff1a; 可执行、并发程序、值集、请求组等的定义&#xff0c;定义需要从开发环境、测试环境、UAT环境一直到…

AI智慧工地视频分析系统 yolov7

AI智慧工地视频分析系统通过yolov7网络模型视频智能分析技术&#xff0c;AI智慧工地视频分析算法模型对画面中物的不安全状态以及现场施工作业人员的不合规行为及穿戴进行全天候不间断实时分析&#xff0c;发现有人不合规行为及违规穿戴抽烟打电话等立即自动抓拍存档告警。在架…

跨平台开发之 Tauri

比起 Electron&#xff0c;Tauri 打包后的安装包体积是真的小。 跨平台开发 最近使用跨平台开发框架写了一个软件&#xff0c;在此记录一下。 说起跨平台开发&#xff0c;我的理解是这样的&#xff1a; 多依赖浏览器环境运行多使用前端语言进行开发只需一次编码&#xff0c;…

JavaScript的this关键字

文章目录 一、JavaScript this 关键字总结 一、JavaScript this 关键字 面向对象语言中 this 表示当前对象的一个引用。 但在 JavaScript 中 this 不是固定不变的&#xff0c;它会随着执行环境的改变而改变。 在方法中&#xff0c;this 表示该方法所属的对象。 如果单独使用&a…

2023/4/18总结

项目 实现了服务器和客户端的连接&#xff0c;在登录注册上面。 然后去实现了密码MD5化&#xff0c;通过java自带的&#xff0c;去实现了MD5. public String getMD5(String str) throws NoSuchAlgorithmException {MessageDigest mdMessageDigest.getInstance("MD5&quo…

SSTI模板注入小结

文章目录 一、漏洞简述&#x1f37a;二、flask模板注入&#x1f37a;三、shrine&#xff08;攻防世界&#xff09;&#x1f37a;四、SSTI注入绕过&#x1f37a; 一、漏洞简述&#x1f37a; 1、SSTI&#xff08;Server-Side Template Injection&#xff0c;服务器端模板注入&am…

5个面向Python高级开发者的技巧

使用这些用于自定义类行为、编写并发代码、管理资源、存储和操作数据以及优化代码性能的高级技术来探索 Python 的深度。 本文探讨了 Python 中的五个高级主题&#xff0c;它们可以为解决问题和提高代码的可靠性和性能提供有价值的见解和技术。从允许您在定义类时自定义类行为的…

SpringBoot基础学习之(二十):Shiro与Thymeleaf的整合版本

还是一样&#xff0c;本篇文章是在上一篇文章的基础上&#xff0c;实施再次进阶 Shiro是一种特别的流行的安全框架&#xff0c;Thymeleaf则是spring boot架构中使用的一种特别引擎。今天介绍的则是它们俩的整合版本。 实现的功能&#xff1a;前端的显示的内容&#xff0c;是根…

vi/vim命令,使用vi编辑器命令详解

linux常用命令:vi/vim vi命令有三种模式&#xff1a;一般模式&#xff0c;编辑模式&#xff0c;命令模式&#xff08;底行模式&#xff09; 可以通过 vi [文件路径]文件名 的命令启动vi&#xff0c;并且打开指定的文件进行查看、编辑&#xff0c;其中[文件路径] 是可选参数。如…

微信小程序开发:实现毛玻璃效果

前言 在微信小程序开发的时候&#xff0c;也会遇到一些和在前端开发一样的样式需求&#xff0c;二者的相通类似性非常的高&#xff0c;就拿样式相关的需求来说&#xff0c;可以说是一模一样的操作。那么本文就来分享一个关于实现高斯模糊效果的需求&#xff0c;微信小程序和前端…

【Linux网络服务】FTP服务

FTP服务 一、FTP服务1.1FTP服务概述1.2FTP服务的特点1.3FTP服务工作过程 二、设置FTP服务2.1实验一&#xff1a;设置匿名用户访问FTP服务&#xff08;最大权限&#xff09;2.2实验二&#xff1a;设置本地用户验证访问ftp&#xff0c;并禁止切换到ftp以外的目录&#xff08;默认…

Linux- 进程的切换和系统的一般执行过程

我想在介绍进程切换之前&#xff0c;先引入中断的相关知识&#xff0c;它是我们理解进程切换的重要前提&#xff0c;也是Linux操作系统的核心机制。 中断的类型 • 硬件中断&#xff08;Interrupt&#xff09;&#xff0c;也称为外部中断&#xff0c;就是CPU的两根引脚&…

微服务学习-SpringCloud -Nacos (集群及CP架构相关学习)

文章目录 Nacos集群下心跳机制相对于单机会有怎样的改变&#xff1f;CAP原则和BASE原则常见的注册中心实现对比Nacos集群实现协议Nacos CP架构实现源码Nacos CP架构leader是如何选举的呢&#xff1f; Nacos集群下心跳机制相对于单机会有怎样的改变&#xff1f; 在上一遍单机模…

百万赞同:网络安全为什么缺人? 缺什么样的人?

1.网络安全为什么缺人? 缺人的原因是有了新的需求 以前的时候&#xff0c;所有企业是以产品为核心的&#xff0c;管你有啥漏洞&#xff0c;管你用户信息泄露不泄露&#xff0c;我只要做出来的产品火爆就行。 这一切随着《网络安全法》、《数据安全法》、《网络安全审查办法》…

No.041<软考>《(高项)备考大全》【第25章】量化项目管理

第25章】量化项目管理 1 考试相关2 量化项目管理3 准备量化管理项目4 量化的管理项目5 练习题参考答案: 1 考试相关 选择可能考0-1分&#xff0c;案例论文不考。 2 量化项目管理 量化项目管理&#xff08;QPM&#xff09;的目的在于量化地管理项目&#xff0c;以达成项目已建…