我有一个正在访问该文件的人正在生成一个文件(一种审核文件)。看起来如下:
我需要编写一个报警系统,该报警系统输入所述报告并检查所有用户。但是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行:[[:--------:语法错误:操作数 预期的(错误令牌为“-”)
据我所知,它接受了“ ------”异常,但仍将其视为一种输入。
那么,我想念什么?
答案 0 :(得分:3)
-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。