剪切脚本命令错误 shell

erreur commande cut script shell

当我想执行这个脚本时,执行在 cut 命令处被阻止并且显示了 man cut

脚本代码

#!/bin/bash

for i in `cat newcontext` ;do

var1=`cut –f1 –d" " $i`
var2=`cut –f2 –d" " $i`

if [ $var2 = false ];then

for j in `cat adaptrules`;do

c=`cut -f1 -d" " $j`
cc=`cut -f2 -d" " $j`

if [ $c = $var1 ];then
r=$cc 
fi

done 

sed /$var1/d currentconfig>>newconfig

else

for k in `cat adaptrules`;do
var3=`cut –f1 –d" " $k`
var4=`cut –f2 –d" " $k`

if [ $var3 = $var1 ];then
action=$var4
fi
done
cat $action >> newconfig
fi
done

the content of text files

我的脚本使用上下文数据 (newcontext)、当前配置和适配规则生成新配置 (newconfig)。

您需要使用示例执行剪切命令:

var1=$(cut -f1 -d " " <<< $i)

您正在尝试执行剪切命令,就好像 $i 包含一个文件名,而实际上它包含文本。

很难知道您是否正在尝试从变量 ijk 中命名的文件中读取,或者您是否只是在尝试解析newcontextadaptrules 行。在这两种情况下,您根本不应该使用 cut。如果您正在尝试后者,您可以改为执行以下操作:

#!/bin/bash

while read var1 var2 ; do
  if test "$var2" = false; then
    while read c cc ; do
      if test "$c" = "$var1"; then
        r=$cc
      fi
    done < adaptrules
    <&- sed /$var1/d currentconfig>>newconfig  #WTF: multiple iterations with only one line omitted?
  else
    while read var3 var4 ; do
    if test "$var3" = "$var1"; then
       action=$var4
    fi
    done < adaptrules
    <&- cat $action >> newconfig  # Does $action really name a file?
                              # I'm guessing this should be 'echo'
  fi
done < newcontext

我发现问题中代码的格式很难阅读,所以我不会花很多时间来验证这个逻辑是否符合你的逻辑。变量 r 似乎完全未使用,sedcat 似乎不正确......但这给了你想法。

此外,将内部部分写成这样在文体上可能更简洁:

if test "$var2" = false; then 
  while read c cc; do 
    ...
  done
else
  while read var3 var4; do
    ...
  done
  ...
fi < adaptrules

请注意,您需要注意外部 while 循环中的 none 命令会消耗标准输入中的任何内容。 (因此 <&- 关闭了 sedcat 的文件描述符,这在这些情况下并不是绝对必要的,但演示了如何确保您不会无意中从输入中消耗到循环。)做这样的事情可能更干净:

while read -u 5 var1 var2; do 
...
done 5< newcontext

我的脚本旨在生成新配置 (newconfig)。此配置是使用上下文数据(新上下文)、适应规则(adaptrules)和当前配置(currentconfig)生成的。该脚本的工作方式如下:对于每个上下文数据(newcontext 中的字段 var1),我们寻找它的操作(adaptrules 中的字段 cc)。然后我们验证当前配置中是否存在此操作。然后,如果当前配置中存在所选上下文数据的操作,并且上下文数据的字段 var2 等于 false,则从当前配置中删除该操作;否则,如果当前配置中不存在该操作,并且上下文数据的 var2 等于true,因此该操作已添加到当前配置中。我修改了我的脚本,但它生成了一个错误 "sed, command c expects followed by text"。

新代码如下

#!/bin/bash

while read var1 var2 ;do

while read c cc;do
if test "$c" = "$var1" ;then
r=$cc
fi
done <adaptrules

exist=false
while read var; do

if test "$var" = "$r";then
exist=true 
fi
done < currentconfig
if test "$var2" = false  && test "$exist" = true; then

sed -i "/$r/d" currentconfig

fi

if test "$var2" = true && test "$exist" = false; then

echo "$r">> currentconfig

fi

done < newcontext

谢谢