【问题标题】:bash program with argument from terminal带有来自终端的参数的bash程序
【发布时间】:2015-10-28 09:53:00
【问题描述】:

我正在尝试编写一个 bash 脚本来运行一个 python 程序,该程序在终端中获取文件名和打印值。我的 bash 程序应该从终端获取三个参数。首先是 python 程序名称,其次是文件夹名称第三个是我要存储 python 程序输出的文件名。

#!/bin/bash
directoryname = "$1"
programname = "$2"
newfilename ="$3"
for file in directoryname
 do
  python3 programname "$file"  >> newfilename
 done

我正在执行程序如下: ./myscript.sh mypython.py /home/data myfile.txt

但它给出的错误是:

 ./myscript.sh: line 2: directoryname: command not found
 ./myscript.sh: line 3: programname: command not found
 ./myscript.sh: line 4: newfilename: command not found

请帮帮我。我对 bash 脚本很陌生。

【问题讨论】:

  • 去掉变量名和=之间的空格
  • 你的意思是从命令行,对吧?你说的是“从终端”,但对我来说,这意味着在脚本运行后提示和读取一个值。
  • 您要处理指定目录中的所有文件吗?如果没有,为什么你有一个循环?如果是这样,您需要将/*(和$)——如$directoryname/*——添加到循环控制中。

标签: python bash


【解决方案1】:

改为:

#!/bin/bash
directoryname="$1"
programname="$2"
newfilename="$3"
for file in $directoryname
do
      python3 "$programname" "$file"  >> "$newfilename"
done

= 周围没有空格。 var 在其名称前用 $ 标记。一般来说,如果引用 var 扩展会更好($var vs "$var")。

而且,我假设您确实想要目录中的文件列表,但目录名只是目录本身(如 /home/user/)。如果是这样,您将需要:

for file in "$directoryname"/*

【讨论】:

    【解决方案2】:

    = 与变量名称和值之间不必要的空格会导致问题,请删除空格并重试。将工作。 :)

    #!/bin/bash
    directoryname="$1"
    programname="$2"
    newfilename="$3"
    for file in directoryname
     do
      python3 programname "$file"  >> newfilename
     done
    

    【讨论】:

    • 这是问题的一部分,但不是全部。
    • 好吧,我不知道 python shell 命令,但我试图做的是消除他提到的错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多