通过bash脚本从文本文件运行命令

时间:2017-02-04 18:37:35

标签: linux bash shell unix scripting

我正在尝试编写一个脚本,该脚本将读取文本文件,然后执行以&#34开头的每一行;运行"或" chk"作为一个命令。这就是我到目前为止所做的:

#!/bin/bash
counter=1
for i in $@
do
    while read -r line 
    do
    if [[ ${line:0:4} == "run " ]]
    then
        echo "Now running line $counter" 
        ${line:4:${#line}}
    elif [[ ${line:0:4} == "chk " ]]
    then
        echo "Now checking line $counter" 
        ${line:4:${#line}}
    elif [[ ${line:0:2} == "# " ]]
    then
        echo "Line $counter is a comment"
    else
        echo "Line $counter: '$line' is an invalid line"
    fi
    counter=$((counter+1))
    done<$i
done

然而,当我用例如命令

提供文本文件时
run echo > temp.txt

它实际上并没有创建一个名为temp.txt的文件,它只是回应&#34;&gt; TEMP.TXT&#34;回到stdout。当我尝试做类似

之类的事情时,它也会做类似的事情
run program arguments > filename.txt

它没有按照我的意愿将程序的输出放在一个文件中,而是试图对待&#39;&gt;&#39;作为文件名。

我知道这是一个超级特定的,可能是显而易见的事情,但我对bash和所有shell脚本都很新。

由于

1 个答案:

答案 0 :(得分:1)

您需要使用v(2:n-1) = 0.5 * (v(1:n-2) + v(3:n)) 来对变量执行所有正常的shell解析:

eval

您也不需要eval "${line:4}" 。如果省略长度,则默认为字符串的其余部分。