条件使用

时间:2012-01-04 21:47:56

标签: bash shell

我有一个包含内容的文件:

$> cat file
1
2
4

现在,我想使用/运行另一个脚本,如果数字之间的差异(减法)大于1,否则退出主脚本。

我尝试以下列方式执行此操作,但不起作用:

less file \
| awk '\
    function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}\
    BEGIN{i=1;}\
    {new=old;old=$1}\
    {if(abs($1-new)>1)i++;}
    END{if(i>1) print 1; else print 0;}' \
| while read i;do
 if (( ${i} ));then
 echo -n "Would you like to continue? [yes or no]: "
 read yno
   case ${yno} in   
       y )
           echo Continuing...
           ;;
       n )
           echo Exiting...
           ;;
       * )
           echo "Invalid input"
           ;;
   esac
 else echo Cont...
 fi
done

我希望,如果$ {i} == 1,那么我可以做出决定,无论我是否愿意继续。

2 个答案:

答案 0 :(得分:1)

你写了

  

我希望,如果$ {i} == 1,

是的,但是如果$ {i} =“输入错误”或其他一些值,您的语句需要明确说明您的情况。使用less来将文件发送到管道也不是标准情况,为什么不直接将文件名传递给awk进行处理,即

awk '\
    function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}\
    BEGIN{i=1;}\
    {new=old;old=$1}\
    {if(abs($1-new)>1)i++;}
    END{if(i>1) print 1; else print 0;}' file1 \
  | while read i;do
 if (( "${i}" == 1 ));then
 echo -n "Would you like to continue? [yes or no]: "
 read yno
 . . .

我希望这会有所帮助

答案 1 :(得分:0)

问题是唯一的输入是来自awk脚本完全消耗的less。控制台不可用。

这样的事情会有用吗

i=$(awk 'function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}BEGIN{i=1;}{new=old;old=$1}{if(abs($1-new)>1)i++;}END{if(i>1) print 1; else print 0;}' file)
if (( ${i} ));then
  echo -n "Would you like to continue? [yes or no]: "
  read yno
  case ${yno} in

    y )
       echo Continuing...
       ;;
    n )
       echo Exiting...
       ;;
    * )
       echo "Invalid input"
       ;;
  esac
else echo Cont...
fi