shell脚本:"'<<';“无与伦比”-使用here文档时出现语法错误

shell脚本:"'<<';“无与伦比”-使用here文档时出现语法错误,shell,ksh,Shell,Ksh,嗨,我正在尝试编写一个程序,如果感兴趣的人在给定时间上网,它会提醒用户。到目前为止,我的计划是 #!/usr/bin/ksh message="" when="" validFiles="" validUsers="" if [ $# -gt 0 ] ; then while getopts w:m: opt do case $opt in w) when=$OPTARG;; m) message=$OPTARG;;

嗨,我正在尝试编写一个程序,如果感兴趣的人在给定时间上网,它会提醒用户。到目前为止,我的计划是

#!/usr/bin/ksh
message=""
when=""
validFiles=""
validUsers=""

if [ $# -gt 0 ] ; then
    while getopts w:m: opt
    do
        case $opt in
        w) when=$OPTARG;;
        m) message=$OPTARG;;
        \?) echo $USAGE exit 2;;
        esac
    done
    shift $(($OPTIND - 1))
    if [[ $# -gt 0 ]] ; then
        for i; do
            if [[ -f "$i" && -r "$i" ]]; then
                if ! echo $validFiles | grep $i >/dev/null; then
                    validFiles="$validFiles $i"
                fi
            elif id $i 2> /dev/null 1>&2; then
                if ! echo $validUsers | grep $i > /dev/null; then
                    validUsers="$validUsers $i"
                fi
            fi
        done
        if [[ $when != "" && $validFiles != "" || $validUsers != "" ]] ;then
            for i in $validUsers; do
                if ! grep $i $validFiles >/dev/null; then
                    at $when <<"END"
                        if finger $i | grep $i; then
                            echo "$i is online" | elm $message
                        fi
                    END
                fi
            done
        fi
    else
        echo "No files or usernames"
    fi
else
    echo "No arguments provided"
fi
#/usr/bin/ksh
message=“”
when=“”
validFiles=“”
validUsers=“”
如果[$#-gt 0];然后
而getopts w:m:opt
做
案例$opt-in
w) 当=$OPTARG;;
m) message=$OPTARG;;
\?)echo$使用退出2;;
以撒
完成
班次$($OPTIND-1))
如果[$#-gt 0]];然后
为了我;做
如果[-f“$i”&&r“$i”];然后
如果!echo$validFiles | grep$i>/dev/null;然后
validFiles=“$validFiles$i”
fi
elif id$i 2>/dev/null 1>&2;然后
如果!echo$validUsers | grep$i>/dev/null;然后
validUsers=“$validUsers$i”
fi
fi
完成
如果[[$when!=”“&&&$validFiles!=”“| |$validUsers!=”“];然后
因为我在$validUsers;做
如果!grep$i$validFiles>/dev/null;然后

在$when处,此处的字符串分隔符不得缩进,您的
结尾应位于行的开头:

$ cat <<EOT
> foo
>         bar
> EOT
foo
        bar
$cat条
>EOT
福
酒吧
如果希望缩进尾随分隔符,可以使用以下语法,但这也将从here文档本身中删除所有前导选项卡(这仅适用于选项卡!):

$cat条
>库克斯
>EOT
福
酒吧
库克斯
请注意,so指定的此行为应适用于所有兼容外壳:


如果重定向符号是“谢谢!我刚刚得到了它!在对命令本身的调用中是否还有定界符?比如at(delimiter)我不确定我是否理解您的问题,是否要重新措辞?好的,我不能缩进命令。是否有选项可以为我删除多余的空白?您可以缩进here文档内容,缩进量可以任意多或少,只是不允许缩进结束分隔符(否则解析器将不知道here文档的结尾),这应该不是问题吗?我添加了一些关于
命令的信息
$ cat <<EOT
> foo
>         bar
> EOT
foo
        bar
$ cat <<-EOT
>         foo
>         bar
>         quux
>         EOT
foo
bar
quux