剪切期间添加异常会返回不良结果

时间:2018-06-28 08:22:07

标签: linux bash unix

我有一个正在访问该文件的人正在生成一个文件(一种审核文件)。看起来如下:

image

我需要编写一个报警系统,该报警系统输入所述报告并检查所有用户。但是bash出于某种原因会将“ ------”解释为输入。

for i in $(cut -c 8-13 report_file.csv)
do
if [[ $i -eq 'suser' ]] || [[ $i -eq '--------' ]] || [[ $i -eq 'login' ]] || $i -eq 'root']] 
then 
break
else 
echo "email text"+ $i | mailx -s "email subject" $EMAILS_LIST
done 

此输出为:

  

./ script_name.sh:第26行:[[:--------:语法错误:操作数   预期的(错误令牌为“-”)

据我所知,它接受了“ ------”异常,但仍将其视为一种输入。

那么,我想念什么?

1 个答案:

答案 0 :(得分:3)

test中的

-eq(与extended test [[...]]中相同)是整数的运算符。 '---------'不是整数。使用=比较字符串。

... [[ "$i" = 'suser' ]] || [[ "$i" = '--------' ]] || [[ "$i" = 'login' ]] || [[ "$i" = 'root' ]]

或更简单

... [[ "$i" = 'suser' || "$i" = '--------' || "$i" = 'login' || "$i" = 'root' ]]

或更简单:

case "$i" in 
suser|--------|login|root) ;; 
*) echo "email text"+ $i | mailx -s "email subject" $EMAILS_LIST; ;;
esac

旁注:
使用for i in $(...)从文件中读取行是bad。最好使用while read -r line; do .... done < <(cut -c 8-13 report_file.csv)cut -c 8-13 report_file.csv | while read -r line; do ... done参见here