Shell笔记--使用系统函数、自定义函数和Shell工具

2023-11-11

​​​​​​​

目录

1--basename和dirname系统函数

2--自定义函数

3--Shell常用工具

3-1--cut

3-2--sort


1--basename和dirname系统函数

① basename 基本用法:basename [string / pathname] [suffix]

basename:删除最后一个 '/' 字符(包括 '/' 字符)前面的内容(即 string/ ),显示剩下的字符串(即 pathname);

suffix: 后缀,当 suffix 被指定时,basename 会将 pathname 或 string 中的 suffix 去掉;

代码实例:

basename $PWD/test.sh

basename $PWD/test.sh .sh

② dirname 基本用法:dirname 文件绝对路径

dirname:从给定的绝对路径中,去除文件名(非目录的部分),然后返回剩下的路径;

代码实例:

dirname $PWD/test.sh

2--自定义函数

        基本语法:

function funname(){
    xxxxxxxx
}

# 调用
funname

        因为 shell 脚本是逐行运行的,函数在调用之前必须先声明;

        函数的返回值通过 $? 系统变量获得,通过 return 返回;不使用 return 时默认返回最后一条命令的运行结果;

        代码实例:求解输入两个参数的累加和

#!/bin/bash

function sum(){
        s=0
        s=$[$1+$2]
        echo $s
}

read -p "input your paratemer1: " p1
read -p "input your paratemer2: " p2

sum $p1 $p2

3--Shell常用工具

3-1--cut

        cut 用于从文件的每一行剪切字节、字符和字段,并将其输出;

基本用法:cut [选项参数] filename

-f 列号,提取第几列

-d 分隔符,按照指定分隔符进行分割列

        实例代码:分割 MacOS 系统中 ifconfig 关于 en0 inet的地址,即下图红框内容:

ifconfig en0

ifconfig en0 | grep 'inet 172' | cut -d " " -f 2

# 首先通过管道过滤得到 ifconfig en0 关于 inet 的内容
# 接着使用 cut 按照分隔符 “ ”(即空格)进行剪切,最后通过 -f 提取第 2 列数据

3-2--sort

        sort 用于将文件进行排序,并将排序结果进行标准输出;

sort(选项)(参数)

-n 依照数值的大小排序

-r 以相反的顺序来排序

-t 设置排序时所用的分割字符

-k 指定需要排序的列

        测试代码:

vim test.txt
# 输入以下内容
AA:100:500
BB:50:200
CC:90:300
DD:200:350
EE:10:400

        按 : 进行分割,对第二列进行排序:

sort -t : -nrk 2 test.txt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell笔记--使用系统函数、自定义函数和Shell工具 的相关文章

  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • 如何使用waf构建共享库?

    我想使用构建一个共享库waf http code google com p waf 因为它看起来比 GNU 自动工具更容易 更简洁 到目前为止 我实际上有几个与我开始编写的 wscript 有关的问题 VERSION 0 0 1 APPNA
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • cdc_acm:无法设置 dtr/rts - 无法与 USB cdc 设备通信

    我试图使用 pic24fj128gb206 枚举 usb cdc 设备 设备似乎已正确枚举 但是当我将设备连接到 Linux PC 时 我从内核收到以下警告消息 cdc acm 1 8 1 6 7 1 0 failed to set dtr
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • 研究缓冲区溢出时应该使用哪些版本的 GCC 或标志?

    最近 作为计算机工程专业的本科生 我一直在研究缓冲区溢出 出于兴趣 我开始研究缓冲区溢出 但在尝试在我的计算机上用 GCC 4 9 1 在 Debian Jessie 中 编译的我自己的 C 程序中实现它们时遇到了困难 我听说较新的编译器中
  • 如何在文件中搜索多行模式?

    我需要找到包含特定字符串模式的所有文件 我想到的第一个解决方案是使用find管道与xargs grep find iname py xargs grep e YOUR PATTERN 但是 如果我需要查找跨越多行的模式 我就会陷入困境 因为

随机推荐

  • Ubuntu:安装deb文件包

    sudo dpkg i deb 如果报依赖错误执行下面语句再试 sudo apt get f fix missing install
  • query和params传参的区别

    一 query和params传参的区别 1 query传递显示参数 params传递不显示参数 params相对于query来说较安全一点 取值方法也有不同 1 query取值 this r o u t e
  • ubuntu启动时黑屏,无法进入登录界面

    方式1 1 重新启动客户机 2 点击屏幕立即长按左shift键或ESC 3 出现grub菜单后选择第二个 4 又出现一个列表继续选择第二个 5 下一个页面选择第一个 6 下一个界面点击OK就可以了 但不能保证下次开机时能不能进入 方式2 在
  • django梳理

    概述 1 框架推导流程 web框架 Yietong309的博客 CSDN博客 前期准备知识 2 django请求生命周期流程图 客户端发送HTTP发送request请求 经过网关发送到中间件 在经过路由层 视图层 模型层 模板层 这两个都与
  • 鸿蒙-实践课程一 android、ios、HarmonyOS

    目前ide对于js调试还是如其它android ios一样 存在较多缺陷 config json配置导致中间调试的断层 建议初学者如果是java或者语言类转入 可以先用java语言进行学习 首先 你需要理清楚 Ability AceAbil
  • pygraphviz安装教程

    0x01 背景 最近在做casual inference 做实验时候想因果图可视化 遂需要安装pygraphviz 整了一下午 终于捣鼓好了 真头大 环境 win10操作系统 python3 9环境 在这里 如果有conda环境 直接可以使
  • 代码级测试

    代码级测试的测试方法一定是一套测试方法的集合 而不是一个测试方法 因为单靠一种测试方法不可能发现所有潜在的错误 一定是一种方法解决一部分或者一类问题 然后综合运用多种方法解决全部问题 常见代码错误类型 第一 语法特征错误 语法特征错误是指
  • 编写高质量代码:改善Java程序的151个建议(第8章:异常___建议110~117)

    不管人类的思维有多么缜密 也存在 智者千虑必有一失 的缺憾 无论计算机技术怎么发展 也不可能穷尽所有的场景 这个世界是不完美的 是有缺陷的 完美的世界只存在于理想中 对于软件帝国的缔造者来说 程序也是不完美的 异常情况会随时出现 我们需要它
  • 系统调用(int 0x80)详解

    1 系统调用初始化 在系统启动时 会在sched init void 函数中调用set system gate 0x80 system call 设置中断向量号0x80的中断描述符 define set system gate n addr
  • Python基础知识题库(带答案)

    单项选择题 第一章python语法基础 1 Python 3 x 版本的保留字总数是C A 27 B 29 C 33 D 16 2 以下选项中 不是 Python 语言保留字的是C A while B pass C do D except
  • python爬取网页的方法总结,python3.9爬取网页教程

    大家好 小编为大家解答python 爬取网页内容并保存到数据库的问题 很多人还不知道利用python爬取简单网页数据步骤 现在让我们一起来看看吧 需求分析 今天遇到一个简单的需求 需要下载澳大利亚电力市场NEM日前市场的发电商报价数据 ne
  • LeetCode题目笔记——965. 单值二叉树

    文章目录 题目描述 题目链接 题目难度 简单 方法一 遍历 哈希表 代码 Python 方法二 深度优先 代码 Python 总结 题目描述 如果二叉树每个节点都具有相同的值 那么该二叉树就是单值二叉树 只有给定的树是单值二叉树时 才返回
  • Field 'id' doesn't have a default value问题解决方法

    Field id doesn t have a default value问题解决方法 突然想温习温习对数据库的读写 于是就用mysql建了一张单独的表 见代码1 用Hibernate写了个应用 可以正常查询 修改数据了 开始时 数据是在m
  • IDEA——Java:程序包xxxx不存在终极方案总结

    最近在接手一个新的java项目 导入到IDEA后发现存在报错 程序包找不到 寻思应该是某些依赖没有加载进来 但几番尝试后发现问题依旧 于是决定调研下对应的解决方案 说实话类似这种问题的解决方案网上一搜一大堆 但试了很多根本不管用 其实大多数
  • Vue项目,通过数组下标更改数组的值不生效,页面没有重新渲染

    大家好 我是小梅 公众号 小梅的前端之路 原创作者 作为在前端领域不断探索的一员 在此记录开发中遇到的问题 如果你也遇到了相同的问题 希望本文对你有帮助 问题背景 今天在开发中遇到了一个需要 在列表里要通过按钮的点击控制手机号码列是显示正常
  • vue实现连接Mysql数据库和服务器通信

    在vue中 我们不仅是为了做前端页面展示和数据响应式 最重要的还是去访问后端请求 把数据给数据库存储 这样刷新页面数据才不会丢失 vue中对于数据的发送以及存储也很重要 稍不注意也会存在很大的问题 所以我们要学习一下存储数据以及对数据的请求
  • IDEA运行jar包不存在问题

    写在前面 本博客中解决方法适用情景为依赖包导入无错的情况下 即IDEA原因 解决方案 点击File gt Invaildate Cache Restart重启IDEA 2 若1无效 cmd路径切换到项目下执行mvn idea idea 再打
  • java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)

    报错信息 Exception in thread main java lang UnsupportedClassVersionError pers cyz BookManage has been compiled by a more rec
  • p值小于0.05拒绝还是接受_25常见种误区:P值、置信区间和统计功效

    连享会主页 lianxh cn 连享会 小直播 Stata 数据清洗 第二季 连享会 计量专题 因果推断 内生性 专题 2020 11 12 15 主讲 王存同 中央财经大学 司继春 上海对外经贸大学 课程主页 https gitee co
  • Shell笔记--使用系统函数、自定义函数和Shell工具

    目录 1 basename和dirname系统函数 2 自定义函数 3 Shell常用工具 3 1 cut 3 2 sort 1 basename和dirname系统函数 basename 基本用法 basename string path