Shell unix一元运算符错误
我试图在输入文件路径中找到一个字符串,如果匹配,则将其替换为其他文件路径 下面是代码 * * echo语句正确地将值显示为某个数字,但在if语句中,我得到了一元运算符错误Shell unix一元运算符错误,shell,unix,scripting,Shell,Unix,Scripting,我试图在输入文件路径中找到一个字符串,如果匹配,则将其替换为其他文件路径 下面是代码 * * echo语句正确地将值显示为某个数字,但在if语句中,我得到了一元运算符错误 有人能帮我纠正一下我缺少的地方吗看来您还没有定义b变量,所以当您编写 if [ $idx -gt $b ] shell在展开变量后看到了这一点 if [ 12 -gt ] 使用以下表格之一: if [ "$idx" -gt "$b" ] # use quotes to maintain the operators
有人能帮我纠正一下我缺少的地方吗看来您还没有定义
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
似乎您尚未定义
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
感谢所有回答我问题的人…问题在于index命令,而不是将其保留在括号中。[[]]的语法正常工作,但出现了“缺少整数表达式”的新错误。下面是最后运行的代码
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
感谢所有回答我问题的人…问题在于index命令,而不是将其保留在括号中。[[]]的语法正常工作,但出现了“缺少整数表达式”的新错误。下面是最后运行的代码
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
idx=expr index$FilePath'Forecast'
应该是什么?@muru,可能是backtick的格式问题。您没有为b分配任何内容。如果使用双引号if[“$idx”-gt“$b”]
@Muru,idx=expr index$FilePath'Forecast'
是检查变量$FilePath中是否存在字符串“Forecast”的表达式,则会得到一条稍好的错误消息。这里有点不对劲。我猜…正常的if语句正在工作,但是if表达式中的idx给出了一元运算符什么是idx=expr index$FilePath'Forecast'
应该是?@muru,可能是backtick的格式问题您没有给b赋值。如果使用双引号if[“$idx”-gt“$b”]
@Muru,idx=expr index$FilePath'Forecast'
是检查变量$FilePath中是否存在字符串“Forecast”的表达式,则会得到一条稍好的错误消息。这里有点不对劲。我猜…正常的if语句正在工作,但是if表达式中的idx给出了一元运算符。注意,[[[[$idx>$b]]
也是有效的,而且(依我看)总是喜欢旧的测试的一个重要原因。这里根本不是讨论这个问题的好地方,也许我是在咆哮,但最近我看到很多代码都在使用这种结构,我的直觉是发生了重定向,这总是受到语法的干扰。除了词法比较,所以“2”>“12”啊!避免[[
!我永远不会理解支持实现类似语法的参数,以避免一些小错误,并使过程中的每个人都感到困惑!嗨,Glenn,谢谢你的回答。这里我的目的是在filepath变量中找到“Forecast”一词。如果该词存在,我将执行replace string。nit:b已声明,但不是initi同样,请注意,[[$idx>$b]]
也是有效的,并且(IMO)总是倾向于使用较旧的测试的一个重要原因。这里根本不适合讨论,也许我是在咆哮,但最近我看到很多代码使用这种结构,我的直觉是,有重定向发生,这总是受到语法的干扰。除了词法比较,所以“2”>“12”啊!还有更好的理由避免[[
!我永远不会理解支持实现类似语法的参数,以避免一些小陷阱,并在过程中混淆每个人!嗨,Glenn,谢谢你的回答。这里我的目的是在filepath变量中找到“Forecast”一词。如果该词存在,我将替换字符串。