Linux Shell 命令在手动输入时有效。放入脚本文件时不工作

标签 linux bash shell

我有一个名为 LinuxCommands 的 Linux 脚本,用于检查以确保我的机器具有安装 Oracle 所需的先决条件。如果我从 Windows 记事本复制所有文本并将其粘贴到我的 Linux 终端,该脚本将起作用,但当我将实际的 .sh 文件通过 ftp 传输到 Linux 终端并通过调用 bash 运行它时,该脚本不起作用。如果我使用 ./符号,脚本根本不起作用。我使用 root 来复制命令和使用 ./或 bash 符号运行文件。 Linux脚本如下

#!/bin/bash
#Install packages, upgrade those that already exist

PKG_OK=$(dpkg-query -W --showformat='${Status}\n' binutils-2.17.50.0.6 compat-libstdc++-33-3.2.3 compat-libstdc++-33-3.2.3 elfutils-libelf-0.125 elfutils-libelf-devel-0.125 gcc-4.1.2 gcc-c++-4.1.2 glibc-2.5-24 glibc-common-2.5 glibc-devel-2.5 glibc-headers-2.5 ksh-20060214 libaio-0.3.106 libaio-devel-0.3.106 libgcc-4.1.2 libstdc++-4.1.2 libstdc++-devel make-3.81 sysstat-7.0.2|grep "install ok installed")
echo Checking for libraries: $PKG_OK
if [ "" == "$PKG_OK" ]; then
  echo "Not Installed. Installing"
  yum -y install binutils-2.17.50.0.6 compat-libstdc++-33-3.2.3 compat-libstdc++-33-3.2.3 elfutils-libelf-0.125 elfutils-libelf-devel-0.125 gcc-4.1.2 gcc-c++-4.1.2 glibc-2.5-24 glibc-common-2.5 glibc-devel-2.5 glibc-headers-2.5 ksh-20060214 libaio-0.3.106 libaio-devel-0.3.106 libgcc-4.1.2 libstdc++-4.1.2 libstdc++-devel make-3.81 sysstat-7.0.2
fi


#Adds oinstall and dba groups
/bin/id -g oinstall 2>/dev/null \
[ $? -eq 0 ] && echo "Group found" || sudo /usr/sbin/groupadd oinstall

/bin/id -g dba 2>/dev/null \
[ $? -eq 0 ] && echo "Group found" || sudo /usr/sbin/groupadd dba

#Adds oracle user in oinstall group

if id -u oracle >/dev/null 2>&1; then
        echo "user exists"
else
        /usr/sbin/useradd -m -g oinstall -G dba oracle
fi

#Creates installation directory for Oracle
chown -R oracle:oinstall /u00/Oracle12CInstall
chmod -R 775 /u00/Oracle12CInstall

#Adds Oracle variables to the Oracle User's profile.
cat <<EOF > /home/oracle/.bash_profile
ORACLE_BASE=/u00/Oracle12cInstall
ORACLE_HOME=$ORACLE_BASE/test2/product/121
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export ORACLE_BASE
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:/usr/X11R6/bin:/usr/lib

export PATH

export ORACLE_BASE ORACLE_HOME LD_LIBRARY_PATH
umask 022

EOF

我在 Linux 终端上运行时得到的错误是

bash LinuxCommands
: command not found 3:
LinuxCommands: line 4: dpkg-query: command not found
Checking for libraries:
LinuxCommands: line 47: syntax error: unexpected end of file

最佳答案

这道题通过运行解决了

dos2unix LinuxCommands

上面的命令从我的文件中删除了 DOS 行结尾,它能够成功运行。

关于Linux Shell 命令在手动输入时有效。放入脚本文件时不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26995488/

相关文章:

MySQL 服务器无法在 Raspberry Pi 上启动

bash - 无法使用 curl : argument too long 将大文件发送到 elasticsearch

Python子进程Exec格式错误

mysql - Shell - 一行查询

linux - 输出shell变量时如何保留引号?

bash - 你如何使用命令启动 Unix screen 命令?

linux - 在 Shell 中显示未找到的命令以及正确的退出状态。这怎么能解决?

c - .data + .bss的ELF二次加载段地址

linux - 是否有用于 'mapping' 的 unix 命令行实用程序?

bash - 用 || 替换新行