gpt4 book ai didi

linux - Ubuntu 16.04 上的 Amazon CLI bash 脚本,if 语句上的 "unexpected operator"(语法看起来正确)

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:57 28 4
gpt4 key购买 nike

我正在尝试解决在 Ubuntu Server 16.04 上运行的 Amazon CLI 备份脚本遇到的问题。

当我手动运行脚本时,我看到我的 if 语句抛出错误。根据请求,我已将我的示例简化为最小且可验证的。该脚本在另一台生产服务器上运行得很好。我还通过 shell 语法检查器运行它,据我所知,语法看起来是正确的。我错过了什么?

此外,语法检查器希望我将所有变量用双引号引起来。为什么?

错误:

backup.sh: 34: [: Friday: unexpected operator

例子:

#!/bin/bash

################
# User Settings:
################

# your AWS bucket name
aws_bucket="s3://mybucket"

# your server path to AWS
aws_path="/usr/bin/aws"

weekly_backup_day="Friday"

# the (2 digit?) date you want your monthly backup run
monthly_backup_date="01"

################
# Set Date Variables
################

dayOfWeek="$(date +'%A')"
monthNumber=$(date + '%m')
dateOfMonth=$(date '+%d')

################
# Run Weekly
################

if [ $# -lt 1 ] && [ "$dayOfWeek" == "$weekly_backup_day" ] ; then

echo "Running Weekly"
$aws_path s3 sync "$aws_bucket"/daily/"$dayOfWeek" "$aws_bucket"/weekly/"$dateOfMonth" --delete

fi

最佳答案

这打破了:

monthNumber=$(date + '%m')

必须是

monthNumber=$(date +'%m')

但我怀疑这只是一个打字错误,因为它会阻止您的错误消息出现。

您可能正在按如下方式运行:

sh ./backup.sh

这意味着 #!/bin/bash 行被忽略,并且运行 POSIX 模式下的 Bash 或另一个 shell。 == 不是 POSIX,所以你必须改变

if [ $# -lt 1 ] && [ "$dayOfWeek" == "$weekly_backup_day" ]

if [ $# -lt 1 ] && [ "$dayOfWeek" = "$weekly_backup_day" ]

或运行它

bash ./backup.sh

或者只是

./backup.sh

考虑:

$ sh -c '[ 1 == 1 ] && echo Yes'      # Can't have "==" in sh
sh: 1: [: 1: unexpected operator
$ sh -c '[ 1 = 1 ] && echo Yes' # "=" is okay
Yes
$ bash -c '[ 1 == 1 ] && echo Yes' # Bash does not care either way
Yes
$ bash -c '[ 1 = 1 ] && echo Yes'
Yes
$ bash -c '(( 1 == 1 )) && echo Yes' # (( )) is a Bashism
Yes

至于“为什么引用”,总结起来就是“因为分词和全局扩展”。 Wooledge 维基有一个 good article关于它。

关于linux - Ubuntu 16.04 上的 Amazon CLI bash 脚本,if 语句上的 "unexpected operator"(语法看起来正确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43940369/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com