我正在尝试在输入文件路径中找到一个字符串,如果匹配则将其替换为不同的文件路径。
以下是代码。
*
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语句中,我得到一元运算符错误。
任何人都可以在我失踪的地方纠正我
答案 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