【问题标题】:Shell script with Python [closed]带有 Python 的 Shell 脚本 [关闭]
【发布时间】:2019-11-07 23:26:53
【问题描述】:

我是脚本新手。我想执行如下脚本。但是我收到错误。请帮我解决这个问题。

脚本文件名:TestScript.sh 执行:./TestScript.sh "A"

#!/bin/bash


COStesting("Test")
{
    if [ $1 = "A" ]
    then
        Name = "Tiger"
        Gender = "Male"

    elif [ "$1" = "B" ]
     then
        Name = "Lion"
        Gender = "Male"
    fi
}
    pass=`python3 - <<END
    import subprocess
      print(Name, Gender)
    END
    ```

【问题讨论】:

  • 错误是什么?这个脚本的目的是什么?我的意思是你希望它做什么?
  • 您不能将在 Python 内部的 shell 脚本中创建的 shell 变量作为 Python 变量访问。一种方法是将exportshell 变量放入环境中,使它们成为环境变量,然后使用environment access mechanism in Python 来检索值。
  • COStesting("Test") 不是有效的 shell 函数语法; ( ) 之间不能有任何东西,除了空格。
  • 请注意,bash 中的赋值语法不是var = val,而是var=val。仅此一项就一定会为你造成command not found
  • 我推荐shellcheck.net 指出常见的shell语法错误。

标签: python python-3.x bash shell


【解决方案1】:

这就是你想要的;合并我和其他人在 cmets 中提到的一些东西。

#!/bin/bash

COStesting()
{
    local Name
    local Gender
    if [ "$1" == "A" ]
    then
        Name="Tiger"
        Gender="Male"
    elif [ "$1" == "B" ]
    then
        Name="Lion"
        Gender="Male"
    fi
    pass=$(Name="$Name" Gender="$Gender" python3 - <<-END
        from os import environ
        print(environ['Name'], environ['Gender'])
    END
    )
    echo $pass
}
  • 请确保在您从此处复制的内容中,缩进是使用制表符而不是空格来完成的

这里做了什么:

  • 评论:Shell script with Python

    您不能将在 Python 内部的 shell 脚本中创建的 shell 变量作为 Python 变量访问。一种方法是将shell变量导出到环境中,使其成为环境变量,然后使用Python中的环境访问机制来取值。

    我所做的只是将它们导出为 python 命令,而不是全局。

  • 评论:Shell script with Python

    COStesting("Test") 不是有效的 shell 函数语法; ( ) 除了空白之外,你不能有任何东西。

  • 评论:Shell script with Python

    请注意,bash 中的赋值语法不是var = val,而是var=val。仅此一项就一定会导致找不到您的命令

  • 评论:Shell script with Python

    对于此处字符串的缩进,您需要使用&lt;&lt;-END 和制表符而不是空格

  • 您在 [ 命令中使用单个 = 而不是双 == 作为比较运算符
  • pass 是函数中的局部变量。要将其输出,您需要将其从函数中echo 发送到标准输出。

要使用这个函数,你首先source &lt;filename.sh&gt;(除非你只是用这个函数将命令附加到文件中)然后你可以像$(COStesting "$AorB")一样使用它,其中$AorB是一些包含'A'或@的变量987654343@.

【讨论】:

【解决方案2】:
COStesting()
{
    if [ $1 == "A" ]
    then
      Name="Tiger"
    Gender="Male"

elif [ "$1" == "B" ]
 then
    Name="Lion"
    Gender="Male"
fi
}

COStesting  $1
pass=$(python3 <<END
import subprocess
print('$Name', '$Gender')
END
)

【讨论】:

    猜你喜欢
    • 2020-01-04
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2019-04-27
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多