当前位置: 首页 > news >正文

【linux/shell实战案例】在shell中插入Python代码及EOF解析

目录

一.什么情况需要在shell中插入Python代码

二.如何在shell中插入Python代码

三.什么是内联输入重定向?

四.什么是EOF

五.为什么要用EOF

六.<<EOF和<<-EOF的区别

七.案例代码


 

一.什么情况需要在shell中插入Python代码

  • shell不好处理的数据或文件,Python有更方便的函数库可使用;
  • 合并一些其他人写的Python脚本,使用shell统一管理,减少文件数量。

二.如何在shell中插入Python代码

  1. 创建一个.sh文件,在里面正常写shell;
  2. 写到需要插入Python代码的位置,按照内联输入重定向的合适插入以下内容:
python<<EOFimport osfiles=os.listdir("$1")files.sort()……

EOF

三.什么是内联输入重定向?

格式

command<<dilimiterdocumentdelimiter

它的作用是将一对分隔符之间的内容(命令或文本)作为输入传递给命令command,注意结尾的delimiter要顶格写,不能有空格和制表符。

通常我们使用的delimiter是EOF这个关键字。

四.什么是EOF

在C语言中存在关键字EOF。

EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
EOF是一个整数类型的宏定义,扩展为负数常量表达式(通常为-1)。它被头文件中的好几个函数作为返回值使用,来表明已经到达文件尾或者示意一些其他的错误条件。

五.为什么要用EOF

在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。

在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,实际上 EOF 的值通常为 -1,因此可以用EOF作为文件结束标志。

#include <stdio.h>
int main(){int n;while(scanf("%d",&n) != EOF){ }return 0;
}


当上面的程序运行时,如果不加" != EOF",那么这个程序就是个死循环,会一直运行下去;加上" != EOF"后该程序就不是死循环了

六.<<EOF和<<-EOF的区别

<<-EOF将忽略起止内容中前面的tab制表符,而<<EOF不会

cat <<EOFline1line2EOF输出:line1line2
cat <<EOFline1line2EOF输出: line1line2

七.案例代码

在shell中创建一个函数,这个函数中包含了Python代码,并且含有参数。

#!/bin/bash
function data2d_trans list(
#python function
python<<-EOF
import os
files=os.listdir("$1")
files.sort()
for file in files:
path="$1"+"/"+file
fl=open(path)
for line in fl.readlines):
line=line.replace("n","")
line=line.strip).split("t")
for i in line:
if i==":
line.remove(i)
for num in line:
f2=open("$2",'a)
f2.write(num)
f2.write("t")
f2.write("n")
f2.close()
f1.close()
EOF
}
#use function
data2d_trans_list dir_power temp_data_ power

 

 

 

 

 

相关文章:

  • Linux中进程和线程区别
  • vue实现一个简单的审批绘制功能
  • 数据提取的奥秘
  • c++初级-2-引用
  • uniapp 使用cavans 生成海报
  • 使用docker搭建squid和ss5
  • Docker Compose 一键快速部署 RocketMQ
  • SpringBoot3集成MyBatisPlus
  • 【鸿蒙学习笔记】Image迭代完备
  • 难道 Java 已经过时了?
  • Android 内存原理详解以及优化(二)
  • 边缘网关在实际应用中的价值与挑战-天拓四方
  • 66.前端接口调用返回400的错误
  • OpenBMB × Hugging Face × THUNLP,大模型课开班丨伙伴活动推荐
  • P3374 【模板】树状数组 1
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 230. Kth Smallest Element in a BST
  • Apache的80端口被占用以及访问时报错403
  • CSS 提示工具(Tooltip)
  • ES6 学习笔记(一)let,const和解构赋值
  • express + mock 让前后台并行开发
  • HashMap剖析之内部结构
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java到底能干嘛?
  • js 实现textarea输入字数提示
  • Linux链接文件
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • node和express搭建代理服务器(源码)
  • quasar-framework cnodejs社区
  • react-native 安卓真机环境搭建
  • Solarized Scheme
  • 百度地图API标注+时间轴组件
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 对象管理器(defineProperty)学习笔记
  • 关于 Cirru Editor 存储格式
  • 区块链技术特点之去中心化特性
  • 人脸识别最新开发经验demo
  • 实习面试笔记
  • 使用SAX解析XML
  • 因为阿里,他们成了“杭漂”
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 进程与线程(三)——进程/线程间通信
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​linux启动进程的方式
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #162 (Div. 2)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (四)Android布局类型(线性布局LinearLayout)
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • *上位机的定义
  • ../depcomp: line 571: exec: g++: not found
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core 中间件与过滤器