【发布时间】:2018-07-21 12:14:35
【问题描述】:
运行我的 shell 脚本时出现此错误:
': not a valid identifiere 17: read: `
这是我的 shell 脚本:
#!/usr/bin/env bash
# Mr. Robot Install Wordpress Script
# Script is used for the following:
# add user to server
# change to new user home directory
# download latest version of wordpress
# unzip wordpress
# move all files up a directory level
# move up a directory level
# delete wordpress.zip
# remove wordpress folder
echo "/*****************************************************/"
echo "/************** HELLO MR. ROBOT **********************/"
echo "/*****************************************************/"
echo ".."
echo ".."
echo "Website URL"
echo 'url: \r'
read -p $website
echo 'User: \r'
read -p $newuser
echo 'Pass: \r'
read -p $password
echo "creating account......"
/scripts/wwwacct $website $newuser $password 0 x3 n n n 0 0 0 0 0 0
echo "Changing Directory....."
cd ~/home/$newuser/
echo "Getting Latest Version of Wordpress!"
curl -O http://wordpress.org/latest.tar.gz
echo "Tarball Incoming!!"
tar xvzf latest.tar.gz
echo "removing tar file"
rm latest.tar.gz
echo "moving wordpress folders!"
cp -a ~/home/$newuser/public_html/wordpress/. ~/home/$newuser/public_html/
cd /home/$newuser/public_html/
echo "Part 01 Complete!!"
exit
我尝试使用带有-p 或-e 的不同版本的读取行。任何帮助,将不胜感激。我什至尝试将其添加到带有输入的单独行中。
编辑:将文件更新到需要输入的位置,但问题是脚本的其余部分没有使用输入。从而导致找不到目录的错误。
【问题讨论】:
-
我猜:脚本没有 shebang 或使用不同的解释器调用,而不是 /bin/bash 或安装了 bash 的任何地方。但是 read 不是该解释器的一部分。你如何调用脚本?它不退出,没有退出语句(最后一行)吗?
-
我通过命令行运行脚本:/scripts/mr-robot.sh
-
在继续之前做两件事。首先,在您的脚本上运行
dos2unix。其次,添加#!/usr/bin/env bash的shebang。然后开始故障排除。 -
造成这种情况的直接原因实际上是the StackOverflow
bashtag wiki 的“询问有问题的代码之前”部分中的第一件事。 (修复后你会有一个不同的错误——由于不适当的扩展,你的值都被读入REPLY,而不是命名变量,但是......嗯......这是一个不同的错误 i>,还有 shellcheck.net 会捕捉到的东西)。 -
@ZacharyAdams,...顺便说一句,请考虑通过shellcheck.net 运行您的脚本并修复它找到的所有内容。尤其是引用错误,可能会导致不必要的意外。