我有一个带参数文件的函数。我想逐行阅读。
条件
如果这些行在<?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脚本的新手而且我已经失去了
答案 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