【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
相关推荐
QT 小鲜肉18 小时前
【Linux命令大全】003.文档编辑之col命令(实操篇)
linux·运维·服务器·前端·chrome
千谦阙听19 小时前
回看2025,续写2026
linux·学习·考研
取加若则_1 天前
Linux进程调度:双队列高效管理
linux·算法
维度攻城狮1 天前
ros2参数通信案例
开发语言·windows·python·ros2·参数通信
深圳佛手1 天前
不用智能体开发框架,如何调用工具?
前端·python
清水白石0081 天前
Python 与尾递归:为何不优化?如何优雅绕过?
开发语言·python
王大傻09281 天前
使用python for循环与ord() + chr()实现字符串加密
开发语言·python
540_5401 天前
ADVANCE Day35
人工智能·python·深度学习
郑泰科技1 天前
python深度学习报错:Original error was: No module named ‘numpy.core._multiarray_umath‘
python·深度学习·numpy
chenyuhao20241 天前
Linux网络编程:TCP协议
linux·运维·服务器·网络协议·tcp/ip·udp·tcp