文件传输到服务器后 Shell 脚本无法运行,但如果复制到 VI 中则可以运行

文件传输到服务器后 Shell 脚本无法运行,但如果复制到 VI 中则可以运行

正如标题所述,我编写了一个 shell 脚本,然后将文件传输到 RHEL6 或 7。我授予脚本可执行权限并运行。它输出一堆错误。

如果我 vi backup.sh,复制脚本文本,然后:wq 和 chmod +x 它可以完美运行。

我试过 filezilla 和 WinSCP。我尝试将传输设置更改为二进制。我试过 notepad++ 和 notepad.exe。除了在实际服务器上创建脚本外,其他都不起作用。

这个问题不只发生在我身上。同事们在他们的机器上也遇到了同样的结果。

有任何想法吗?

# !/bin/bash
# A backup script that copies important files to a backup folder called 
#`hostname`_'date +%Y-%m-%d`;
# Example: BrianAA_2017-10-11

path=/tmp/`hostname`_`date +%Y-%m-%d`
backup=$path

echo "Making backup directory $backup now"
mkdir -p -m777 $path

#Copy
cp -pr /opt/advatar/etc/advatar.conf $backup
cp -pr /etc/hosts $backup
cp -L /etc/rc.local $backup
cp -pr /etc/sysconfig/network $backup
cp -pr /etc/ntp.conf $backup
cp -pr /etc/sysconfig/ntpd $backup

#Looks for only "ifcfg-*" in /etc/sysconfig/network-scripts/
rsync -a --include='ifcfg-*' --exclude '*' /etc/sysconfig/network-scripts/ 
$backup

#iptables || firewalld
cat /etc/redhat-release | egrep -q '6.*'
if [ "$?" = "0" ]; then
    cp -pr /etc/sysconfig/iptables $backup
    cp -pr /etc/sysconfig/iptables-config $backup
fi
cat /etc/redhat-release | egrep -q '7.*'
if [ "$?" = "0" ]; then
    cp -pr /etc/firewalld $backup
fi

#prints output of network information to txt files in $backup
route > $backup/route.txt
ip a s > $backup/ifconfig.txt

#Looks for external mount points and searches by type: cifs, nfs, rpc,
#then copies necessary files to $backup if present in mount
mount | egrep -q 'cifs|nfs|rpc'
if [ "$?" = "0" ]; then
mount > $backup/mount.txt
    cp -pr /etc/auto.cifs $backup
    cp -pr /etc/auto.master $backup
    cp -pr /root/.smbauth $backup
    cp -pr /etc/fstab $backup
else
    echo "No Network Mount"
fi

[root@IFS-AA6 tmp]# ./back.sh
: 未找到命令
: 未找到命令
nowng 备份目录 /tmp/IFS-AA6_2017-10-26
: 未找到命令
: 未找到命令
错误:复制超过 1 个文件时目标必须是目录
rsync 错误:选择输入/输出文件、目录时出错(代码 3) 在 main.c(542) [receiver=3.0.6]
rsync:连接意外关闭(迄今为止已收到 9 个字节) [sender]
rsync 错误:rsync 协议数据流错误(代码 12) 在 io.c(600 [sender=3.0.6]
: 未找到命令
./back.sh:第 50 行:意外令牌fi' ./back.sh: line 50:fi'附近的语法错误
[root@IFS-AA6 tmp]#

答案1

确保在传输文件时,行尾仅是 LF,而不是 CRLF。对于以 \r\n 为行尾的空白行,: command not found 最有可能是 \r: command not found – glenn jackman 16 分钟前

@glennjackman 非常感谢 就是这样

相关内容