You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python匹配单词后调用shell脚本传参打印的报错修复方案

问题根因

报错和功能不生效来自两个独立问题:

  • Shell脚本存在语法错误:Bash的if/elif/else条件结构必须用fi关键字标记结束,你的脚本漏写了fi,解析器读到文件末尾都没找到结构闭合标记,就抛出了unexpected end of file错误。另外脚本里读取的是$2(第二个输入参数),但调用时根本没传参,就算语法正确也拿不到匹配到的单词。
  • Python调用脚本时没有传递匹配结果:你写的os.system调用只执行了脚本本身,没有把当前匹配到的word作为参数传给脚本,Shell端自然无法识别匹配到的内容。
修复方案
  1. 先给Shell脚本加可执行权限,终端执行命令:
    chmod +x /home/raed/Desktop/1.sh
  2. 修正Shell脚本,补全语法结构,读取传入的匹配词参数。你当前三个分支的执行逻辑完全一致,不需要保留冗余的条件判断,最简正确版本如下:
#!/bin/bash
matched_word="$1"
echo "This is '${matched_word}'"
exit 0

如果需要保留原条件分支结构,注意补上fi闭合标记,同时把参数引用从$2改成对应传入位置的$1:

#!/bin/bash
########################
if [ "$1" = "pear" ]; then
    echo " This is '$1'"
elif [ "$1" = "apple" ]; then
    echo " This is '$1'"
else
    echo " This is '$1'"
fi
exit 0
  1. 修正Python代码中调用Shell的逻辑,把匹配到的单词作为参数拼接在执行命令后传入脚本:
import os
# 待匹配词表
matching_words = ["apple", "pear", "car", "house"]

# 获取用户输入
user_string = input("Please enter some text:")

# 遍历词表匹配
for word in matching_words:
    if word in user_string:
        print("\n{} is in the user string\n\n".format(word))
        # 将匹配到的词作为参数传入Shell脚本
        os.system(f'/home/raed/Desktop/1.sh {word}')

修复后运行程序,输入包含词表内单词的文本时,Shell脚本就能正确接收到匹配到的单词并打印。

内容的提问来源于stack exchange,提问作者user18418127

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:54:16