如果声明,Bash程序挂起

时间:2013-09-05 21:59:54

标签: linux bash

我是bash的新手,我有一个程序可以对csv文件进行排序,然后根据输入进行打印或保存。但是在保存的if语句之后它继续挂在它上面。

if [ "$1" = "-f" ]; then
    sort -r -t, -k5 $1>sorted.csv
elif [ "$2" = "" ]; then
    sort -r -t, -k5 $1
fi

是不是要对文件$ 1进行排序并将其保存到sorted.csv? elif工作?

2 个答案:

答案 0 :(得分:5)

sort正在等待数据。您是否将CSV文件重定向到脚本中?或者你的意思是将"$2"传递给test

答案 1 :(得分:2)

第一个if测试查看参数$ 1并在该参数为'-f'时执行某些操作。有些东西在'sort'调用中使用相同的参数,评估为:

sort -r -t, -k5 -f > sorted.csv

这将挂起,因为您必须将您想要排序并保存在sorted.csv中的文件内容输入脚本。我想当它挂起时你总是可以输入csv文件内容并用CTRL-D完成:-)。 '-f'会在我的机器上进行折叠排序。

如果您的意思是传递文件名:

if [ $# -gt 1 ]
then
   if [ $1 = "-f" ]
   then
      # assume $2 not a control switch for sort but a file name
      sort -r -t, -k5 $2 > sorted.csv
   fi
fi
if [ $# -eq 1 ]
then
   # assume $1 not a control switch for sort but a file name
   sort -r -t, -k5 $1
fi