【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
相关推荐
原机小子29 分钟前
探索Vim的窗口艺术:窗口拆分功能全解析
linux·编辑器·vim
2401_858120264 小时前
探索sklearn文本向量化:从词袋到深度学习的转变
开发语言·python·机器学习
bigbearxyz6 小时前
Java实现图片的垂直方向拼接
java·windows·python
立秋67896 小时前
使用Python绘制堆积柱形图
开发语言·python
一颗星的征途6 小时前
宝塔-Linux模板常用命令-centos7
linux·运维·服务器
打打打劫6 小时前
Linux字符设备驱动
linux
jOkerSdl6 小时前
第三十章 方法大全(Python)
python
cssl-虞老师6 小时前
Ubuntu安装Docker
linux·ubuntu·docker
小白学大数据6 小时前
HTML内容爬取:使用Objective-C进行网页数据提取
大数据·爬虫·python·html·objective-c·cocoa
Xu-小安安6 小时前
linux less命令详解
linux·less