unix一元运算符错误

时间:2016-10-20 07:31:55

标签: shell unix scripting

我正在尝试在输入文件路径中找到一个字符串,如果匹配则将其替换为不同的文件路径。

以下是代码。

*

FilePath='/GAMER/WIP/Forecast'
echo $FilePath
fnd='WIP'
repl='Archive'
declare -i idx b
idx= expr index $FilePath 'Forecast'
echo $idx
if [ $idx -gt $b ]
then
   arch_dir=${FilePath/$fnd/$repl}
   echo $arch_dir

fi

*

echo语句正确地将值显示为某个数字,但在if语句中,我得到一元运算符错误。

任何人都可以在我失踪的地方纠正我

2 个答案:

答案 0 :(得分:3)

看来你还没有定义b变量,所以当你写

if [ $idx -gt $b ]

shell在扩展变量

后看到了这一点
if [ 12 -gt  ]

使用以下表格之一:

if [ "$idx" -gt "$b" ]    # use quotes to maintain the operators as words
if [[ $idx -gt $b ]]      # the [[ form does not require quoting
if ((idx > b))            # use arithmetic expression

如果未设置b,第一个表单仍会抛出错误:

$ declare -i idx=12 b
$ [ "$idx" -gt "$b" ] && echo yes
bash: [: : integer expression expected
$ [[ $idx -gt $b ]] && echo yes
yes
$ ((idx > b)) && echo yes
yes

答案 1 :(得分:0)

感谢所有回复我问题的人......问题在于索引命令而不是在括号中。 [[]]的语法有效,但它给出了“缺少整数表达式”的新错误。下面是最终起作用的代码。

    fnd='WIP'
b=0
a=10
repl='Archive'
rep2=$(echo $FilePath | grep -c 'Forecast')

if [[ $rep2 -gt $b ]]
then
   arch_dir=${FilePath/$fnd/$repl}
  # echo $arch_dir
   dir=$FilePath
extn='.csv'
for file in "$dir"*FORECAST*.csv
do
  echo "$file"
  if [[ "$file" > $dir/null ]]; then
    fn=$(echo "$file"|cut -d "." -f1|rev|cut -d"/" -f1|rev)
  mv "$file" $arch_dir"$fn"_$dt$extn
  else
  echo "There are no FORECAST files in directory "$dir
fi
done
fi