我编写了以下shell脚本
while :; do
status=$($EMR_BIN/elastic-mapreduce --jobflow $JOBFLOW --list | grep "CopyLogs" | awk '{print $1}')
[[ $status == +( *RUNNING*|*PENDING*|*WAITING* ) ]] || break
sleep 60
done
它在第3行给出了一个错误syntax error in conditional expression: unexpected token
(''。我尝试在我的大括号之间添加空格,但它不起作用。
任何人都可以帮助我。
答案 0 :(得分:1)
看起来你正在尝试使用扩展的globbing。确保在脚本的前面某处有shopt -s extglob
,或者重写以使用标准的globbing。
#!/bin/sh
while :; do
case $($EMR_BIN/elastic-mapreduce --jobflow $JOBFLOW --list | awk '/CopyLogs/{print $1}') in
*RUNNING*|*PENDING*|*WAITING* ) sleep 60;;
*) break;;
esac
done
由于没有剩余的Bashisms,此脚本现在与POSIX sh
兼容。 (就个人而言,我也认为这种方式更具可读性。)
(另请注意无用的grep | awk
的修复。)