从函数中的参数文件逐行读取

时间:2016-06-13 12:50:29

标签: bash function shell

我有一个带参数文件的函数。我想逐行阅读。

条件

如果这些行在<?bash?>之间,那么我会bash -c '$line',否则我会显示该行。

此处我的文件(文件):

<html><head></head><body><p>Hello
<?bash
echo "world !"
?>
</p></body></html>

这是我的Bash脚本(bashtml):

#!/bin/bash

function generation()
{
  while read line
  do
    if [ $line = '<?bash' ]
    then
      while [ $line != '?>' ]
      do
       bash -c '$line'
      done
    else
     echo $line
    fi
  done
}

generation $file

我执行这个脚本:

./bashhtml

我是Bash脚本的新手而且我已经失去了

1 个答案:

答案 0 :(得分:1)

我认为这就是你的意思。但是,此代码非常危险!插入到这些bash标记中的任何命令都将在您的用户ID下执行。它可以更改您的密码,删除所有文件,读取或更改数据等。不要这样做!

#!/bin/bash

function generation
{
  # If you don't use local (or declare) then variables are global
  local file="$1"              # Parameter passed to function, in a local variable
  local start=False            # A flag to indicate tags
  local line

  while read -r line
  do
    if [[ $line == '<?bash' ]]
    then
        start=True
    elif [[ $line == '?>' ]]
    then
        start=False
    elif "$start"
    then 
        bash -c "$line"      # Double quotes needed here
    else 
        echo "$line"
    fi
  done < "$file"             # Notice how the filename is redirected into read
}

infile="$1"                  # This gets the filename from the command-line
generation "$infile"         # This calls the function