使用Python的Shell脚本

我是脚本新手。我想执行如下脚本。但是我得到了错误。请帮助我解决此问题。

脚本文件名: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
    ```
z15dgh354588 回答:使用Python的Shell脚本

这就是您想要的;结合了我和其他人在评论中提到的一些东西。

#!/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变量访问。一种方法是将外壳变量导出到环境中,使它们成为环境变量,然后使用Python中的环境访问机制来检索值。

    我所做的只是导出python命令而不是全局导出。

  • 评论:Shell script with Python
      

    COStesting("Test")是无效的shell函数语法;您不能在( )之间使用空白。

  • 评论:Shell script with Python
      

    请注意,bash中分配的语法不是var = val,而是var=val。仅仅是这一定会导致找不到ya的命令

  • 评论:Shell script with Python
      

    对于此处字符串的保护,您需要使用<<-END且制表符不能使用空格

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

要使用此功能,请先source <filename.sh>(除非您仅通过此功能将命令附加到文件中),然后再像$(COStesting "$AorB")那样使用它,其中$AorB是包含以下内容的变量'A''B'

,
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
)
本文链接:https://www.f2er.com/3141107.html

大家都在问