erreur commande剪切脚本shell

时间:2017-07-24 10:41:16

标签: linux 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

4 个答案:

答案 0 :(得分:1)

很难知道您是否尝试从变量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循环中的所有命令都不会消耗stdin中的任何内容。 (因此<&-关闭了sedcat的文件描述符,这在这些情况下并不是绝对必要的,但演示了如何确保不会无意中将输入消耗到循环。)做以下事情可能更清晰:

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

答案 1 :(得分:0)

the content of text files

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

答案 2 :(得分:0)

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

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

您正在尝试执行cut命令,就好像$ i包含实际包含文本的文件名一样。

答案 3 :(得分:0)

我的脚本旨在生成新配置(newconfig)。此配置是使用上下文数据(新上下文),自适应规则(自适应)和当前配置(currentconfig)生成的。该脚本的工作原理如下:对于每个contextdata(newcontext中的字段var1),我们寻找它的动作(自适应中的字段cc)。然后我们验证当前配置中是否存在此操作。然后,如果所选的contextdata的操作存在于currentconfig中且contextdata的字段var2等于false,则如果currentconfig中没有该操作且contextdata的var2等于,则从currentconfig中删除该操作。是的,因此将操作添加到currentconfig。我修改了我的脚本,但它生成了一个错误&#34; sed,命令c期望后跟文本&#34;。

新代码如下

#!/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

谢谢