【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代码的位置,按照内联输入重定向的合适插入以下内容:
bash 复制代码
python<<EOF

import os

files=os.listdir("$1")

files.sort()

......

EOF

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

格式

bash 复制代码
command<<dilimiter

document

delimiter

它的作用是将一对分隔符之间的内容(命令或文本)作为输入传递给命令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作为文件结束标志。

objectivec 复制代码
#include <stdio.h>
int main(){
    int n;
    while(scanf("%d",&n) != EOF){ 

    }
    return 0;
}

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

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

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

bash 复制代码
cat <<EOF

    line1

    line2

EOF

输出:

    line1

    line2
bash 复制代码
cat <<EOF

    line1

    line2

EOF

输出: 

line1

line2

七.案例代码

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

bash 复制代码
#!/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
相关推荐
惊讶的猫4 分钟前
langchain-agent的基础使用
python·langchian
Chenyu_31010 分钟前
NUMA 基础:从 CPU、内存到 Node 的整体理解
linux·服务器·网络·缓存
把我格子衫拿来1 小时前
VTK 体绘制入门到排错:传递函数、采样距离与透明度的关系
python·vtk·可视化·医学影像·体绘制
张张123y7 小时前
后端第一课:输入 URL 后发生了什么?我用手写 Socket 把全链路跑通了
python·websocket·ai·socket·url·后端开发
全栈弄潮儿9 小时前
Python实战第7期:字典与集合
后端·python·编程语言
2603_965148119 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
xixiaoyunya10 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
把我格子衫拿来10 小时前
Dice 很高就够了吗?分割评价中的 IoU、表面距离与 HD95
python·图像分割·模型评估·医学影像·dice
曲径海盗10 小时前
【Python 学习第 31 天】复习:变量与数据类型 等 3 题
python·学习笔记·编程入门
Data_Journal10 小时前
如何绕过 Cloudflare:网页抓取的最佳方法
网络·python