语法错误检查文件是否存在

CodeMed

在Amazon Linux 2中运行的bash脚本正在尝试测试文件是否存在。然后,如果确实存在,脚本应删除该文件。

每次脚本运行时,都会引发以下错误。为了使错误不再成为问题,需要在脚本中进行哪些更改?

File "/home/username/write_hosts.sh", line 3
    if [ -f /home/username/hosts ]
                                 ^
SyntaxError: invalid syntax

这是整个脚本:

#!/usr/bin/env bash

if [ -f /home/username/hosts ]
then
    rm /home/username/hosts
fi

declare -a arr_of_tags=("this-master" "this-worker")

for i in "${arr_of_tags[@]}"
do
   echo ["$i"] >> /home/username/hosts
   echo "About to test ip array for $i"
   declare -a arr_of_ips=$(aws ec2 describe-instances --region us-west-2 --query "Reservations[*].Instances[*].PrivateIpAddress" --filter "Name=tag:Name,Values=$i" --output=text)
   for j in "${arr_of_ips[@]}"
   do 
      echo "$j" >> /home/username/hosts
   done
done


用户建议

根据@steve的建议,我得到以下信息:

[username@ip-10-0-0-73 ~]$ bash --version
GNU bash, version 4.2.46(2)-release (x86_64-koji-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
You have new mail in /var/spool/mail/username

注意:的内容/var/spool/mail/username不是新的。与上面上方显示的错误相同。

根据@Jesse_b的建议:

[username@ip-10-0-0-73 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/username/.local/bin:/home/username/bin

[username@ip-10-0-0-73 ~]$ sudo bash write_hosts.sh
write_hosts.sh: line 2: $'\r': command not found
write_hosts.sh: line 7: $'\r': command not found
write_hosts.sh: line 9: $'\r': command not found
write_hosts.sh: line 11: $'\r': command not found
write_hosts.sh: line 13: syntax error near unexpected token `$'do\r''
'rite_hosts.sh: line 13: `do


解决方案

我将脚本更改为以下脚本,然后dos2unix在调用脚本之前先运行了脚本。现在的结果是一个有效的脚本:

#!/usr/bin/env bash

rm -f /home/username/hosts

declare -a arr_of_tags=("this-master" "this-worker")

for i in "${arr_of_tags[@]}"
do
   echo ["$i"] >> /home/username/hosts
   echo "About to test ip array for $i"
   declare -a arr_of_ips=$(aws ec2 describe-instances --region us-west-2 --query "Reservations[*].Instances[*].PrivateIpAddress" --filter "Name=tag:Name,Values=$i" --output=text)
   for j in "${arr_of_ips[@]}"
   do
      echo "$j" >> /home/username/hosts
   done
done

另外,为了确认@steve的怀疑,我看到python正在cronjob定义中被调用,我已将其更正如下:

echo '* * * * * lnxcfg bash /home/username/write_hosts.sh' | sudo tee  /etc/cron.d/refresh_hosts

在更正之前,python在上一行而不是中被调用bash因此,我将@steve的答案标记为已接受。

史蒂夫

您收到的错误表明您实际上是通过Python运行它。

有一些傻瓜用python覆盖了您的bash二进制文件吗?尝试跑步bash --version

例子

[steve@centos ~]$ cat x1
#!/usr/bin/env bash

if [ -f /home/username/hosts ]
then
    rm /home/username/hosts
fi
[steve@centos ~]$ ./x1
[steve@centos ~]$ python x1
  File "x1", line 3
    if [ -f /home/username/hosts ]
                                 ^
SyntaxError: invalid syntax
[steve@centos ~]$ bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

[steve@centos ~]$

顺便说一句,我喜欢简单rm /home/username/hosts 2>/dev/null而不是if/then/rm/fi方法。即尝试删除它,无论它是否存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何仅从命令行检查JavaScript代码是否存在语法错误?

来自分类Dev

MySQL存储过程检查表是否存在,然后更改语法错误

来自分类Dev

批处理文件中是否存在ELSE语法错误?

来自分类Dev

批处理文件中是否存在ELSE语法错误?

来自分类Dev

Python数据框是否存在语法错误

来自分类Dev

此iCalendar事件代码中是否存在语法错误?

来自分类Dev

Xml文件中可能存在语法错误

来自分类Dev

语法错误:文件结尾

来自分类Dev

语法错误文件操作

来自分类Dev

verilog错误:语法错误-是否缺少'::'?

来自分类Dev

python在模块检查中的语法错误

来自分类Dev

MYSQL:不存在语法错误

来自分类Dev

PHP语法检查:解析错误:语法错误?

来自分类Dev

如何检查wpa_supplicant.conf是否有语法错误?

来自分类Dev

Perl语法错误是否在for循环附近?

来自分类Dev

.bashrc是否包含语法错误?

来自分类Dev

检查文件是否存在

来自分类Dev

语法错误:经过仔细检查后,文件意外结束报告

来自分类Dev

检查文件存在错误

来自分类Dev

链接描述文件中的语法错误

来自分类Dev

.zshrc配置文件语法错误

来自分类Dev

.bashrc:语法错误:文件意外结束

来自分类Dev

语法错误:意外的文件结尾

来自分类Dev

包含,需要语法错误文件

来自分类Dev

bash:语法错误:文件意外结束

来自分类Dev

Testbench文件中的语法错误

来自分类Dev

Python文件重命名语法错误

来自分类Dev

语法错误:意外的文件结尾

来自分类Dev

.bashrc语法错误:文件意外结束